2013-11-01 87 views
5

我偶然發現了這種奇特的行爲意外:爲什麼list(my_list)修改對象?

>>> a = [] 
>>> a[:] = ['potato', a] 
>>> print a 
['potato', [...]] 
>>> print list(a) 
['potato', ['potato', [...]]] 

通過什麼機制並呼籲list(a)以自己的字符串表示展開遞歸的一個水平?

回答

2

list()製作淺拷貝。外部列表不再與其包含的列表相同。它按照您的預期打印。

5

...僅在項目包含自身時才顯示 - 即同一個對象。 list(a)使該列表的副本,所以內部a不是同一個對象。它只顯示...,當它到達「一個內部」時,而不是「內部list(a)」。

相關問題