上QQ阅读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-3所示。
当我们把list列表的元素'A'和'B'修改为'X'和'Y'后,元组如图3-4所示。
图3-3 元组定义
图3-4 元组“修改”
表面上看,元组的元素确实变了,其实变的不是元组的元素,而是list列表的元素。元组一开始指向的list列表并没有改成别的list列表,所以元组的“不变”是指每个元素的指向永远不变,如指向'a'就不能改成指向'b',指向一个list就不能改成指向其他对象,但指向的list列表本身是可变的。
理解了“指向不变”后,创建一个内容不变的tuple该怎么做?这时必须保证tuple的每个元素本身也不能改变。