2014-10-19 103 views
4

我讀過Python元組創建後無法修改。例如,元組對象不允許使用項目分配。但是,如果我有一個元組內的列表對象,那麼我可以追加到列表中。那麼,不應該Python不允許這樣做,因爲我們基本上修改了一個元組?修改元組中的列表

+1

我的猜測是,元組僅持有到列表的引用。所以你可以修改引用的內容,而不是引用本身。 – grc 2014-10-19 02:08:14

+2

在這裏看到詳細的答案:https://stackoverflow.com/questions/9755990/why-can-tuples-contain-mutable-items – Totem 2014-10-19 02:08:55

回答

2

從python的documentation

包含對可變對象的參考時,後者的值被改變可以改變不可變容器對象的數值;然而容器仍然被認爲是不可變的,因爲它包含的對象的集合是不能改變的。因此,不變性與具有不變的價值不完全相同,它更加微妙。

在某些方面這意味着元組內的對象仍然有同樣身份id

>>> t 
([0],) 
>>> id(t[0]) 
140282665826440 
>>> t[0].append(1) 
>>> t 
([0, 1],) 
>>> id(t[0]) 
140282665826440 # same as in above 
1

元組的不變性很淺:您無法更改元組引用的對象。但是如果這些對象本身是可變的,你可以改變它們。