Python学习
3.3 列表的可变与元组的不可变
1.列表是可变的类型。当修改列表中的一个元素时,列表的地址不会发生改变,如下:
>>> a=[1,2,3]
>>> id(a)
32090056
>>> a[0]='1'
>>> id(a)
32090056
因此可以向列表中追加一个元素,如下:
>>> b=[1,2,3]
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
2.元组是不可变的类型,若改变其中一值,则会报错,如下:
>>> a=(1,2,3)
>>> a[0]='1'
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
a[0]='1'
TypeError: 'tuple' object does not support item assignment
不可以向元组中追加元素,会报错:
>>> c=(1,2,3)
>>> c.append(4)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
c.append(4)
AttributeError: 'tuple' object has no attribute 'append'
看似列表功能更强大,那为什么要有元组这种数据类型?
答:我们编码,要追求稳定性。在一个比较复杂的项目里,不可能一个人独立完成,而是很多人共同来写代码。那就涉及到代码之间的调用,对于不可改变的类型它们就会有一些优势,因为一旦人们尝试修改这些不可改变的类型就会报错,这就避免了一些隐藏的错误隐藏在你的代码中。
小练习:以下的代码中可以将数字4修改为字符串“4”吗?
>>> a=(1,2,3,[1,2,4])
>>> a[3][2]='4'
>>> print(a)
(1, 2, 3, [1, 2, '4'])
答案是可以的。因为修改的不是元组而是列表。