如果您将列表附加到自身会发生什么?

时间:2014-06-22 18:59:42

标签: python circular-reference

如果我尝试将一个列表附加到自身会发生什么?

# 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被垃圾收集时?

1 个答案:

答案 0 :(得分: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)
[[[...]]]