2014-06-22 44 views
4

如果我嘗試追加一個列表到自己會發生什麼?如果你爲自己添加一個列表會發生什麼?

# Let's say empty list is created. 
some_list = [] 
# Now, append it with self 
some_list.append(some_list) 
# Output shows [[...]] on iPython console. 

這是什麼意思? some_list成爲遞歸列表還是什麼?引用計數爲some_list會發生什麼情況?垃圾收集器如何處理這個問題?當這some_list將垃圾收集?

+2

* some_list是否成爲遞歸列表或其他*是的。垃圾收集器處理循環引用,是的。 –

回答

7

是的,你創建了一個循環引用;列表對象引用自身。這意味着引用計數增加1個額外的引用。

Python的垃圾收集器將處理這種情況;如果沒有其他引用列表對象了,垃圾收集器進程負責打破該圈:

>>> import gc 
>>> some_list = [] 
>>> gc.get_referents(some_list) 
[] 
>>> some_list.append(some_list) 
>>> some_list[0] is some_list 
True 
>>> gc.get_referents(some_list) 
[[[...]]] 
+0

同樣的事情也適用於'Dict'嗎?那麼,一般來說Python中的所有可變數據結構? –

+0

是的,這適用於任何可以引用自己類型的東西,包括字典。 –

+0

非常感謝@Martijn Pieters。 –

相關問題