Python 处理具有循环引用的对象
我的设计如下:Python 处理具有循环引用的对象,python,with-statement,circular-reference,contextmanager,Python,With Statement,Circular Reference,Contextmanager,我的设计如下: \uuuu main\uuuuu参考文献a areferencesb breferencesa 创建一个,然后从\uuuuu main\uuuuuu 因此a和b具有循环引用。然而,在dela之后,我希望a和b都被处理掉 我在许多地方看到了使用上下文管理器的建议,特别是with语句,而不是\uu del\uu()。然而,我看到的和在局部范围内开始和结束的所有示例(例如某个方法) 使用和可以优雅地执行此操作吗? 替代方案是什么?我建议: 使用-这在涉及循环引用时有时适用 或者。
参考文献\uuuu main\uuuuu
a
referencesa
b
referencesb
a
,然后从创建一个
\uuuuu main\uuuuuu
a
和b
具有循环引用。然而,在dela
之后,我希望a
和b
都被处理掉
我在许多地方看到了使用上下文管理器的建议,特别是with
语句,而不是\uu del\uu()
。然而,我看到的和在局部范围内开始和结束的所有示例(例如某个方法)
使用和可以优雅地执行此操作吗?
替代方案是什么?我建议:
- 使用-这在涉及循环引用时有时适用
- 或者。。。只需按照您需要的顺序手动处理内容-不是在
\uu del\uu
中,而是在正确的时间调用显式的dispose
方法
一般来说,当您知道您有循环引用时,依靠自动\uuu del\uu
处理不是一个好主意。它是脆弱的——即使您在某些情况下设法使其工作,依赖项中的微小更改也可能再次破坏它。垃圾收集器应该能够处理这个问题
替代方案是什么
什么也不做。除非您创建数百万个这样的循环引用——并且能够证明这(并且只有这一个)破坏了您的程序——否则这实际上并不重要