在等待长时间运行的函数完成执行时,我开始考虑垃圾回收器是否将清除对不再使用的变量的引用。
例如,我有一个类似的功能:
def long_running_function():
x = MemoryIntensiveObject()
print id(x)
# lots of hard work done here which does not reference x
return
Run Code Online (Sandbox Code Playgroud)
我对解释器是否足够聪明到足以意识到不再使用x并可以取消引用x感到好奇。测试起来有些困难,因为我可以编写代码来检查其引用计数,但是隐式地引用了它,从而避免了这样做的原因。
我的想法是,也许当函数被解析并生成字节码时,它的生成方式可能使它可以在不再引用该对象时清理该对象。
或者,答案是否更简单?只要我们仍在“可以”使用的范围内,就不会对其进行清理?