功能完成后是否从内存中删除了对象?蟒蛇

Jon*_*ein 6 python memory object

说有

class thing(object):
    def __init__(self):
        self.text = "foo"


def bar():
    obj = thing()
    #do something with the object

bar()
Run Code Online (Sandbox Code Playgroud)

是在bar()完成之后从内存中删除obj还是将其仍在内存中,因为它是bar的局部变量而无法访问?(当然,这是假定obj未放入全局或外部容器(例如字典或列表)中)。

Mar*_*ers 7

obj函数退出时,对象引用将被删除。

这是因为CPython(默认的Python实现)使用引用计数来跟踪对象的生存期。obj是局部变量,仅在函数持续时间内存在。thing()是一个只有一个引用的实例obj,并且在obj清理后,引用计数降至0,thing()并立即删除。

如果您使用的是PyPy,IronPython,Jython或其他实现,则对象破坏可能会延迟,因为实现可以自由使用不同的垃圾回收方案。这仅对实现__del__方法很重要,因为它们的调用可能会延迟。

如果您想进一步了解Python名称的工作原理,建议您阅读有关Python名称和值的精彩事实和神话