在阅读以下代码片段时,我已经使用 Python 一段时间了:
>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
我问自己一个问题:为什么 python 元组是不可变的,我可以+=
对它们使用运算符(或者,更一般地说,为什么我可以修改元组)?而我自己也无法回答。
我得到了不变性的概念,虽然它们不像列表那样流行,但元组在 python 中很有用。但是不可变并且能够修改长度对我来说似乎是矛盾的......
在阅读以下代码片段时,我已经使用 Python 一段时间了:
>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
我问自己一个问题:为什么 python 元组是不可变的,我可以+=
对它们使用运算符(或者,更一般地说,为什么我可以修改元组)?而我自己也无法回答。
我得到了不变性的概念,虽然它们不像列表那样流行,但元组在 python 中很有用。但是不可变并且能够修改长度对我来说似乎是矛盾的......
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
说的一样。
是否+=
就地修改对象取决于对象。使用元组,您不会修改对象,因为您可以看到是否创建了另一个指向同一对象的变量:
>>> x = (1, 2)
>>> y = x
>>> x += (3, 4)
>>> y
(1, 2)
对于诸如列表之类的可变对象,您将看到值发生了变化,并显示在其所有名称下:
>>> x = [1, 2]
>>> y = x
>>> x += [3, 4]
>>> y
[1, 2, 3, 4]
您没有修改它,您创建了一个新元组并更改了a
变量的内容
尝试a[0] = a[0] + 1
查看不变性