购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 列表与元组的区别

我们前面提到列表与元组的区别在于元组的元素不能修改,元组一旦初始化就不能修改。

不可变的元组有什么意义?因为元组不可变,所以代码更安全。如果可能,能用元组代替列表就尽量用元组。我们看下面的示例:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

此处使用了嵌套列表,一个列表中包含另一个列表,也可以称为二维数组。一个单一的列表称为一维数组,还有三维、四维等多维数组,不过一般一维和二维数组用得最多,三维以上的数组基本很少用到。

取二维数组中元素的方式为:先取得二维数组里嵌套的数组,如上例中的t[2],取得的是['A', 'B'],t[2]是一个一维数组,从一维数组中获取元素是以a[0]的方式获取的,因而从t[2]中取得编号为0的元素的方式是t[2][0]。

上面的元组定义时有3个元素,分别是'a'、'b'和一个list列表。不是说元组一旦定义就不可变了吗?怎么后来又变了?

别急,我们先看看定义时元组包含的3个元素,如图3-1所示。

当我们把list列表的元素'A'和'B'修改为'X'和'Y'后,元组如图3-2所示。

图3-1 元组定义

图3-2 元组“修改”

表面上看,元组的元素确实变了,其实变的不是元组的元素,而是list列表的元素。元组一开始指向的list列表并没有改成别的list列表,所以元组的“不变”是指每个元素的指向永远不变,如指向'a'就不能改成指向'b',指向一个list就不能改成指向其他对象,但指向的list列表本身是可变的。

理解了“指向不变”后,创建一个内容不变的tuple要怎么做?这时必须保证tuple的每一个元素本身也不能变。 VRRYcbmOeqABvyvbRwKS3M0cNcU+K8G2SkCVQU+AiW55iGT/+va4VhuWZvTiKbBa

点击中间区域
呼出菜单
上一章
目录
下一章
×