如果可以添加元组,元组是如何不可变的(a + =(3,4))

时间:2013-04-28 04:21:23

标签: python list tuples

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

并带有一个清单:

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

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

2 个答案:

答案 0 :(得分:8)

在这个例子中,你没有改变实际的元组,你只是改变了变量a所指向的元组。在此示例中,a += (3, 4)a = a + (3, 4)相同。如果我们在操作之前和之后检查id的{​​{1}},我们可以看到差异:

a

使用列表,>>> 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 的{​​{1}}在操作后不会改变。

答案 1 :(得分: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'

它只是连接。