我的设计如下:
__main__
引用a
a
引用b
b
引用a
a
已创建,然后从__main__
因此a
和b
具有循环引用。但是,del a
我希望处理a
和b
。
我在许多地方看到使用上下文管理器的建议,特别是with
语句而不是__del__()
。但是,我在with
看到的所有示例都以局部范围(例如某种方法)开始和结束
这可以用with
优雅地执行吗?
有什么替代方案?
答案 0 :(得分:5)
我建议:
__del__
中,而是在明确的dispose
方法中在适当的时间调用(s )一般情况下,当您知道自己有循环引用时,依赖自动__del__
处理并不是一个好主意。它很脆弱 - 即使你设法让它在某些情况下工作,依赖关系的微小变化也会再次破坏它。
答案 1 :(得分:2)
有什么替代方案?
什么都不做。直到你创建了数百万这样的循环引用 - 并且可以证明这(并且只有这个)正在打破你的程序 - 它实际上并不重要。
答案 2 :(得分:0)
垃圾收集器应该处理这个问题。