在阅读以下代码片段时,我已经使用Python已经有一段时间了:
>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
我问自己一个问题:为什么python元组是不可变的,我可以在它们上使用+=
运算符(或者更一般地说,为什么我可以修改元组)?我无法回答自己。
我理解了不变性,虽然它们不像列表那样受欢迎,但元组在python中很有用。但是不可改变并且能够修改长度似乎与我相矛盾......
答案 0 :(得分:25)
5
也是不可改变的。当您拥有不可变数据结构时,a += b
等同于a = a + b
,因此会创建一个新数字,元组或其他内容。
使用可变结构执行此操作时,结构已更改。
示例:
>>> tup = (1, 2, 3)
>>> id(tup)
140153476307856
>>> tup += (4, 5)
>>> id(tup)
140153479825840
了解id
的变化情况?这意味着它是一个不同的对象。
现在有list
,这是可变的:
>>> lst = [1, 2, 3]
>>> id(lst)
140153476247704
>>> lst += [4, 5]
>>> id(lst)
140153476247704
id
说的相同。
答案 1 :(得分:5)
+=
是否就地修改对象取决于对象。使用元组,您不会修改对象,因为您可以看到是否创建了指向同一对象的另一个变量:
>>> x = (1, 2)
>>> y = x
>>> x += (3, 4)
>>> y
(1, 2)
对于列表等可变对象,您会看到值更改,显示在其所有名称下:
>>> x = [1, 2]
>>> y = x
>>> x += [3, 4]
>>> y
[1, 2, 3, 4]
答案 2 :(得分:2)
您没有修改它,您创建了一个新元组并更改了a
变量的内容
尝试a[0] = a[0] + 1
查看不变性