这个问题是我之前提出的一个问题的扩展:Python 委托模式 - 如何避免循环引用?阅读回复后,我决定澄清我的问题,但被要求单独发布。
开始:
- Python 文档中的一段(转载如下)指出,循环引用的对象不能保证垃圾收集。我在这里找到的一篇文章暗示了同样的事情。但是对我之前的问题的答复不同意。那么,我是否误解了这篇文章,或者我错过了更多细节?
- 我想使用弱引用,正如 Alex Martelli 对我是否应该担心 Python 中的循环引用?会完全避免在他的回复中提到的垃圾收集循环引用对象的开销吗?如果是这样,它是如何工作的?
相关的 Python 文档表明 Python 文档中的以下段落存在冲突:
CPython 实现细节:CPython 目前使用引用计数方案,对循环链接的垃圾进行(可选)延迟检测,该方案在大多数对象变得无法访问时立即收集它们,但不能保证收集包含循环引用的垃圾。有关控制循环垃圾收集的信息,请参阅 gc 模块的文档。其他实现的行为不同,CPython 可能会改变。当对象变得无法访问时,不要依赖于立即完成对象(例如:始终关闭文件)。
可以在此处找到原始形式的段落:http: //docs.python.org/reference/datamodel.html粗体设置是我的。
提前感谢您的任何回复。