>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
>>>
并带有一个清单:
>>> b = [1,2]
>>> b += [3,4]
>>> b
[1, 2, 3, 4]
>>>
由于元组是不可变的并且列表是可变的,我们如何解释这种行为?
答案 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'
它只是连接。