我已经看过python的官方文档,但我似乎无法找到什么是参考周期。任何人都可以澄清它是什么,因为我想了解GC模块。预先感谢您的回复。python中的引用循环是什么?
16
A
回答
15
引用循环只是指一个或多个引用对象的对象,例如,如果使用代表依赖关系的箭头将其绘制在纸张上,您将看到一个循环。
的(几乎)最简单的参考周期具有两个对象a
和b
引用对方:
a.other = b
b.some_attr = a
朴素的垃圾收集器严格工作过的物体是否被另一对象引用。在这种情况下,如果a
和b
都未被别的引用,它们仍然互相引用,并且幼稚的垃圾回收器可能不会回收内存。 (我不知道是否Python可以通过参考周期或困不,虽然)。
编辑:最简单的参考周期是指本身的对象:
a = []
a.append(a)
10
这是一个参考周期:
l = []
l.append(l)
的l
第一元件,即l[0]
,是现在l
本身环状参考。
3
>>> x=[1,2,3]
>>> x.append(x)
>>> x
[1, 2, 3, [...]]
>>>
现在这里变量x
是指自身,这被称为参考循环。
7
>>> 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
相关问题
- 1. Python for循环中引发了什么?
- 2. 在Python中,循环引用的引用计数是多少?为什么?
- 3. python中的循环引用
- 4. 为什么matlab中的循环比Python中的循环慢?
- 5. python中的无限循环 - 为什么?
- 6. Python for循环 - 为什么这不是无限循环?
- 7. 为什么使用char循环,因为它的索引循环是无限的?
- 8. 什么是错的循环
- 9. Python中的列表中的for循环是做什么的?
- 10. 什么是Python中的对象引用?
- 11. 为什么循环引用的类型投影是非法的?
- 12. python中for循环中的[]括号是什么意思?
- 13. Python列表与循环会发生什么引用
- 14. 循环引用包 - Python/Django
- 15. D中循环索引变量的默认类型是什么?
- 16. 'for'循环中的错误是什么?
- 17. 什么是Qt中的事件循环?
- 18. 什么是c中最快的循环?
- 19. C++中的(;;)循环是什么?
- 20. PHP:foreach循环中的错误是什么?
- 21. 是什么意思$循环= @()
- 22. 循环mysql_real_connect还是什么
- 23. 为什么Swift不会自动处理循环引用(强引用循环)
- 24. Python用于循环和范围。什么是我的错
- 25. 在Python中编写循环的最优雅方式是什么?
- 26. 什么是循环之间的循环中在javascript
- 27. “循环装置”中的“循环”是什么意思?
- 28. 为什么python中的'for'循环改变未引用的列表?
- 29. Python for循环的语法为什么
- 30. 为什么我的函数循环python