元组是不可变的

Python 中 lists 和 tuples 之间的主要区别之一是元组是不可变的,也就是说,一旦元组初始化,就无法添加或修改项目。例如:

>>> t = (1, 4, 9)
>>> t[0] = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

同样,元组没有像 list 那样的 .append.extend 方法。使用+= 是可能的,但它改变了变量的绑定,而不是元组本身:

>>> t = (1, 2)
>>> q = t
>>> t += (3, 4)
>>> t
(1, 2, 3, 4)
>>> q
(1, 2)

在元组中放置可变对象(如 lists)时要小心。这可能会在更改时导致非常混乱的结果。例如:

>>> t = (1, 2, 3, [1, 2, 3])
(1, 2, 3, [1, 2, 3])
>>> t[3] += [4, 5]

两者引发错误,改变元组中的列表中的内容:

TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, 3, [1, 2, 3, 4, 5])

你可以使用+= 运算符追加到元组 - 这可以通过使用你追加的新元素创建一个新元组并将其分配给当前变量来实现; 旧元组没有改变,但更换了!

这避免了转换到列表和从列表转换,但这很慢并且是一种不好的做法,特别是如果你要多次追加。