Skip to main content
 首页 » 编程设计

python之python中的模块级垃圾收集

2025年05月04日17mfryf

假设我有一个模块 mod_x,如下所示:

class X: 
  pass 
 
x=X() 

现在,假设我有另一个模块,它只执行 import mod_x,并开始其业务。模块变量 x 在解释器的生命周期内不会被进一步引用。

类实例 x 是否会在解释器终止时的任何时候 被垃圾回收?

请您参考如下方法:

不,变量永远不会被垃圾回收(直到进程结束),因为模块对象将保留在 sys.modules['mod_x'] 中并且它将有一个引用到 mod_x.x——引用计数永远不会下降到 0(直到所有模块在程序结束时被删除)并且这不是“循环垃圾”的问题——它是一个完全有效的实时引用,并证明没有人每个人都做(例如)a getattr(sys.modules[a], b) 其中字符串变量 a 和 b 恰好值 'mod_x' 和 'x' 至少与解决停机问题一样困难;-)。 (“至少”,因为随时可能会动态加载更多代码...!-)。