10

在阅读以下代码片段时,我已经使用 Python 一段时间了:

>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)

我问自己一个问题:为什么 python 元组是不可变的,我可以+=对它们使用运算符(或者,更一般地说,为什么我可以修改元组)?而我自己也无法回答。

我得到了不变性的概念,虽然它们不像列表那样流行,但元组在 python 中很有用。但是不可变并且能够修改长度对我来说似乎是矛盾的......

4

3 回答 3

32

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说的一样。

于 2013-09-25T21:46:16.500 回答
6

是否+=就地修改对象取决于对象。使用元组,您不会修改对象,因为您可以看到是否创建了另一个指向同一对象的变量:

>>> x = (1, 2)
>>> y = x
>>> x += (3, 4)
>>> y
(1, 2)

对于诸如列表之类的可变对象,您将看到值发生了变化,并显示在其所有名称下:

>>> x = [1, 2]
>>> y = x
>>> x += [3, 4]
>>> y
[1, 2, 3, 4]
于 2013-09-25T21:49:26.317 回答
2

您没有修改它,您创建了一个新元组并更改了a变量的内容

尝试a[0] = a[0] + 1查看不变性

于 2013-09-25T21:47:21.813 回答