Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理具有循环引用的对象_Python_With Statement_Circular Reference_Contextmanager - Fatal编程技术网

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
  • a
    references
    b
  • b
    references
    a
  • 创建一个
    ,然后从
    \uuuuu main\uuuuuu
因此
a
b
具有循环引用。然而,在
dela
之后,我希望
a
b
都被处理掉

我在许多地方看到了使用上下文管理器的建议,特别是
with
语句,而不是
\uu del\uu()
。然而,我看到的
在局部范围内开始和结束的所有示例(例如某个方法)

使用
可以优雅地执行此操作吗?
替代方案是什么?

我建议:

  • 使用-这在涉及循环引用时有时适用
  • 或者。。。只需按照您需要的顺序手动处理内容-不是在
    \uu del\uu
    中,而是在正确的时间调用显式的
    dispose
    方法

一般来说,当您知道您有循环引用时,依靠自动
\uuu del\uu
处理不是一个好主意。它是脆弱的——即使您在某些情况下设法使其工作,依赖项中的微小更改也可能再次破坏它。

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

替代方案是什么

什么也不做。除非您创建数百万个这样的循环引用——并且能够证明这(并且只有这一个)破坏了您的程序——否则这实际上并不重要