先看一個例子: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
在實際工做中,元祖的元素不建議使用可變的對象;變量