2

我的设计如下:

  • __main__参考a
  • a参考b
  • b参考a
  • a被创建然后从__main__

因此ab具有循环引用。但是,del a我宁愿两者兼而有之a,然后将其b处理掉。

我在很多地方看到使用上下文管理器的建议,特别是with语句而不是__del__(). 但是,我在本地范围内看到的所有with开始和结束示例(例如,某种方法)

这可以优雅地执行with吗?
什么是替代方案?

4

3 回答 3

5

我建议:

  • 使用弱引用- 当涉及循环引用时有时适用
  • 或者......只是按照您需要的顺序手动处理东西 - 不是在在正确的时间调用__del__的显式dispose方法中

一般来说,当你知道你有循环引用时,依赖自动__del__处理并不是一个好主意。它很脆弱——即使你设法让它在某些情况下工作,依赖项的微小变化也可能再次破坏它。

于 2011-08-30T09:26:06.157 回答
2

什么是替代方案?

没做什么。直到你创建了数百万个这样的循环引用——并且可以证明这个(而且只有这个)正在破坏你的程序——这实际上并不重要。

于 2011-08-30T09:56:33.680 回答
0

垃圾收集器应该处理这个问题。

于 2011-08-30T09:55:31.453 回答