【问题标题】:What happens if you append a list to itself?如果将列表附加到自身会发生什么?
【发布时间】:2014-06-22 18:59:42
【问题描述】:

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

# 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 什么时候会被垃圾回收?

【问题讨论】:

  • some_list 会变成递归列表还是什么的 是的。垃圾收集器处理循环引用,是的。

标签: python circular-reference


【解决方案1】:

是的,您创建了循环引用;列表对象引用自身。这意味着引用计数增加了 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)
[[[...]]]

【讨论】:

  • 同样的事情也适用于Dict 吗?那么,一般来说,Python 中的所有可变数据结构?
  • 是的,这适用于任何可以引用其自身类型的东西,包括字典。
  • 非常感谢@Martijn Pieters。
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
相关资源
最近更新 更多