關於在元祖中+=

先看一個例子: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

在實際工做中,元祖的元素不建議使用可變的對象;變量

相關文章
相關標籤/搜索