Python中是否存在基于堆栈的变量?

时间:2009-06-24 10:24:18

标签: python

如果我这样做:

def foo():
     a = SomeObject()

离开foo后,'a'是否被立即销毁?还是等待一些GC发生?

1 个答案:

答案 0 :(得分:18)

是和否。离开foo后对象将被销毁(只要没有其他内容可以引用它),但是它是否是立即的是一个实现细节,并且会有所不同。

在CPython(标准python实现)中,使用了引用计数,因此该项将立即被销毁。这有一些例外,例如当对象包含循环引用时,或者引用被保持到封闭框架时(例如,引发了保留对框架变量的引用的异常。)

然而,在Jython或IronPython之类的实施例中,在垃圾收集器启动之前,该对象将无法完成。

因此,您不应该依赖于及时完成对象,而应该只假设它会在最后一次引用之后的某个时刻被销毁。当您确实需要根据词法范围进行一些清理时,要么明确地调用清理方法,要么查看python 2.6中的新with statement(2.5中带有“from __future__ import with_statement”)。 / p>