关于在元祖中+=
先看一个例子:
>>> 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的差别了吧!
在实际工作中,元祖的元素不建议使用可变的对象;