关于在元祖中+=

先看一个例子:python

>>> 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]当作一个普通变量,由于其值是可变的对象,因此,赋值赋值操做能够完成,可是,当在从新赋值后的对象被放入元祖的时候,报错了;并且错误以后,以前的赋值操做也没有回退;blog

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

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

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

 

这样:能够看到+=和extend的差异了吧!class

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

相关文章
相关标签/搜索