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

并附有清单:

>>> b = [1,2]
>>> b += [3,4]
>>> b
[1, 2, 3, 4]
>>> 

由于元组是不可变的,而列表是可变的,我们如何解释这种行为?

4

2 回答 2

8

在示例中,您没有更改实际的元组,您只是更改了变量a指向的元组。在这个例子a += (3, 4)中是一样的a = a + (3, 4)。如果我们检查操作前后的 ,我们可以看到差异ida

>>> a = (1, 2)
>>> id(a)
60516360
>>> a += (3, 4)
>>> id(a)
61179528

使用列表,+=调用.extend()列表,就地改变它。

>>> b = [1, 2]
>>> id(b)
62480328
>>> b += [3, 4]
>>> id(b)
62480328

请注意,操作后idofb不会改变。

于 2013-04-28T04:24:19.590 回答
2

元组是不可变类型,意味着您不能更改存储在变量中的值a。例如,执行以下操作

>>> a = (1, 2)
>>> a[0] = 3

抛出错误TypeError: 'tuple' object does not support item assignment

另一方面,对于列表,

>>> a = [1, 2]
>>> a[0] = 3

这是完全有效的,因为它是可变的。

您正在做的是将值重新分配给变量名称。

a = a + (3, 4)它只是将两者连接起来并将其重新分配给变量a。您实际上并没有更改元组的值。

例如,string是不可变的,因此,

>>> name = "Foo"
>>> name[0] ='o' 

抛出与上述类似的错误。但是,以下是重新分配并且完全有效。

>>> name = name + " Bar"
>>> name
'Foo Bar'

它只是进行连接。

于 2013-04-28T04:27:27.710 回答