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

问题描述 投票:0回答:1

当没有更多对象的引用时,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?
python garbage-collection
1个回答
1
投票

这两段代码都有效。

被任何东西引用都会保护对象不被收集。在大多数情况下包括父对象/类/闭包,因为边界实际上确实“自动”处理引用链

© www.soinside.com 2019 - 2024. All rights reserved.