先看一个例子: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
在实际工做中,元祖的元素不建议使用可变的对象;变量