我的设计如下:
__main__参考aa参考bb参考aa被创建然后从__main__
因此a并b具有循环引用。但是,del a我宁愿两者兼而有之a,然后将其b处理掉。
我在很多地方看到使用上下文管理器的建议,特别是with语句而不是__del__(). 但是,我在本地范围内看到的所有with开始和结束示例(例如,某种方法)
这可以优雅地执行with吗?
什么是替代方案?
我的设计如下:
__main__参考aa参考bb参考aa被创建然后从__main__因此a并b具有循环引用。但是,del a我宁愿两者兼而有之a,然后将其b处理掉。
我在很多地方看到使用上下文管理器的建议,特别是with语句而不是__del__(). 但是,我在本地范围内看到的所有with开始和结束示例(例如,某种方法)
这可以优雅地执行with吗?
什么是替代方案?
我建议:
__del__的显式dispose方法中一般来说,当你知道你有循环引用时,依赖自动__del__处理并不是一个好主意。它很脆弱——即使你设法让它在某些情况下工作,依赖项的微小变化也可能再次破坏它。
什么是替代方案?
没做什么。直到你创建了数百万个这样的循环引用——并且可以证明这个(而且只有这个)正在破坏你的程序——这实际上并不重要。
垃圾收集器应该处理这个问题。