垃圾收集和对对象属性的引用

时间:2019-02-18 16:47:06

标签: python garbage-collection

当不再有对对象的引用时,GC应该会完全摆脱该对象。但是,当我们仍然引用对象的属性或方法时会发生什么?

例如,在下面的代码中,即使a.x被删除,我仍然尝试使用a。这是有效的代码段吗?

import gc

class A:
    def __init__(self, x):
        self.x = x

a = A(7)
x = a.x
del a
gc.collect()

print(x)  # is it going to work?

如果我使用方法而不是属性,答案是否会更改?例如:

import gc

class A:
    def __init__(self, x):
        self.x = x

    def method(self):
        print("A.method", self.x)

a = A(7)
f = a.method
del a
gc.collect()

f()  # is it going to work?

1 个答案:

答案 0 :(得分:1)

这两个代码段都可以工作。

被任何东西引用都可以防止对象被收集。在大多数情况下,都包括父对象/类/闭包,因为绑定实际上确实会“自动”处理引用链。