![Python 3.8从零开始学](https://wfqqreader-1252317822.image.myqcloud.com/cover/226/44510226/b_44510226.jpg)
上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所示。
![](https://epubservercos.yuewen.com/9BE2E2/23721695409570906/epubprivate/OEBPS/Images/img10_p078_1.jpg?sign=1739055954-r7UK4x00DNMvYtr6eDj0AxAiqBuUAjg7-0-44a248fcee95ada9949b11377f15393a)
图3-3 元组定义
![](https://epubservercos.yuewen.com/9BE2E2/23721695409570906/epubprivate/OEBPS/Images/img10_p078_2.jpg?sign=1739055954-qNIEPygkesm2MQdy61knfTH2AHxYYTFK-0-5e0600af6641318666220b40d1217ced)
图3-4 元组“修改”
表面上看,元组的元素确实变了,其实变的不是元组的元素,而是list列表的元素。元组一开始指向的list列表并没有改成别的list列表,所以元组的“不变”是指每个元素的指向永远不变,如指向'a'就不能改成指向'b',指向一个list就不能改成指向其他对象,但指向的list列表本身是可变的。
理解了“指向不变”后,创建一个内容不变的tuple该怎么做?这时必须保证tuple的每个元素本身也不能改变。