IT *_*nja 24 python garbage-collection reference-counting cyclic-reference
我查看了python的官方文档,但我似乎无法找到参考周期.任何人都可以澄清它对我来说是什么,因为我正在尝试理解GC模块.提前感谢您的回复.
Pla*_*ure 22
引用循环只是意味着一个或多个对象相互引用,这样如果您将它绘制在纸上,箭头表示依赖关系,您将看到一个循环.
(几乎)最简单的引用循环是两个对象a并且b相互引用:
a.other = b
b.some_attr = a
朴素垃圾收集器严格地依赖于对象是否被另一个对象引用.在这种情况下,如果a和b不被别的称,他们仍然称对方和天真的垃圾收集器可能无法回收内存.(不过我不知道Python是否可以被参考周期困住.)
编辑:最简单的引用循环是一个引用自身的对象:
a = []
a.append(a)
Fre*_*Foo 12
这是一个参考周期:
l = []
l.append(l)
第一个元素l,即l[0]现在是l它自身的循环引用.
>>> aRef = []
>>> aRef.append(aRef)
>>> print aRef
[[...]]
这将创建一个由名为的变量引用的列表对象aRef.该first element列表中的目的是本身的引用.在这种情况下,del aRef取消引用aRef列表对象.但是,列表对象的引用计数不会减少到零,并且列表对象不会被垃圾回收,因为列表对象仍然引用自身.在这种情况下,Python中的垃圾收集器将定期检查是否存在这样的循环引用,并且解释器将收集它们.以下是手动收集循环引用对象使用的空间的示例.
>>> import gc
>>> gc.collect()
0
>>> del aRef
>>> gc.collect()
1
>>> gc.collect()
0