>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
>>>
并附有清单:
>>> b = [1,2]
>>> b += [3,4]
>>> b
[1, 2, 3, 4]
>>>
由于元组是不可变的,而列表是可变的,我们如何解释这种行为?
在示例中,您没有更改实际的元组,您只是更改了变量a
指向的元组。在这个例子a += (3, 4)
中是一样的a = a + (3, 4)
。如果我们检查操作前后的 ,我们可以看到差异id
: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
请注意,操作后id
ofb
不会改变。
元组是不可变类型,意味着您不能更改存储在变量中的值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'
它只是进行连接。