Object删除对self的引用

时间:2012-11-25 14:45:42

标签: garbage-collection python

Python解释器是否可以优雅地处理对象实例删除对自身的最后一个引用的情况?

考虑以下(无可置疑的无用)模块:

all_instances = []

class A(object):
    def __init__(self):
        global all_instances
        all_instances.append(self)

    def delete_me(self):
        global all_instances
        self.context = "I'm still here"
        all_instances.remove(self)
        print self.context

现在用法:

import the_module
a = the_module.A()
the_deletion_func = a.delete_me
del a
the_deletion_func()

这仍然会打印I'm still here,但是Python的垃圾收集器是否存在竞争条件,它将收集对象实例?
对对象函数的引用是否保存了一天?
解释器是否保留对当前正在执行其代码的对象的引用,直到它完成?

1 个答案:

答案 0 :(得分:6)

不,没有任何这样的竞争条件。您正在清除引用,因此一旦删除方法引用,引用计数将降至1并且对象将被清除

the_deletion_func引用指向一个方法,该方法指向实例(以及类),因此仍有引用。

当前正在执行的方法有一个局部变量self,它也是对实例的引用,但主要是提供该引用的方法包装器。