关于在元祖中+=

先看一个例子:

>>> t  = (1,2,[30,40])
>>> t[2] += [50,60]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
>>> t
(1, 2, [30, 40, 50, 60])

这里产生了一个非常奇怪的现象:本来元祖的元素是不可变的,所以在操作的时候,报了TypeError错误,但是元祖的元素的确实被改变了;

实际上,在赋值语句的时候,如果我们把t[2]当做一个普通变量,因为其值是可变的对象,所以,赋值赋值操作可以完成,但是,当在重新赋值后的对象被放入元祖的时候,报错了;而且错误之后,之前的赋值操作也没有回退;

说明:这样的赋值操作不是原子性的;

为了避免这种操作,元祖中包含可变对象,可以使用如下操作避免报错:

t = (1,2,[30,40])
t[2].extend([50,60])
print(t)

这样:可以看到+=和extend的差别了吧!

在实际工作中,元祖的元素不建议使用可变的对象;

原文地址:https://www.cnblogs.com/cqq-20151202/p/6992156.html