gpt4 book ai didi

python - Python 类属性的生命周期

转载 作者:行者123 更新时间:2023-11-28 21:07:50 29 4
gpt4 key购买 nike

在 Python 中,类属性的生命周期是多长?如果当前没有该类的实例处于事件状态,是否可以对该类及其类属性进行垃圾收集,然后在下次使用该类时重新创建?

例如,考虑如下内容:

class C(object):
l = []

def append(self, x):
l.append(x)

假设我创建了一个 C 实例,将 5 附加到 C.l,然后该 C 实例不再被引用,可以被垃圾收集。稍后,我创建了另一个 C 实例并读取了 C.l 的值。我能保证 C.l 会保持 [5] 吗?或者类本身及其类属性是否可能被垃圾回收,然后 C.l = [] 稍后执行第二次?

或者,换句话说:类属性的生命周期是“永远”的吗?类属性是否与全局变量具有相同的生命周期?

最佳答案

你问了几个问题。

What's the lifetime of a class attribute, in Python?

只要有对它的引用,类属性就会存在。由于类(class)拥有一个引用,它至少会与类(class)一样长寿,假设类(class)继续持有引用。此外,由于每个对象都持有一个引用,因此它至少与所有对象一样长,假设每个对象都继续持有该引用。

Am I guaranteed C.l will hold [5]?

在您描述的假设中,是的。

Or is it possible that the class itself and its class attributes might get garbage-collected, and then C.l = [] executed a second time later?

没有给出您能够构造 C 实例的假设。如果您能够构造 C 的第二个实例,则 C 必须存在,C.l

也必须存在

Is the lifetime of a class attribute "forever"?

没有。类属性的生命周期遵循任何对象的生命周期规则。只要对它的引用存在,它就存在。对于C.l,类中存在一个引用,每个实例中都存在一个引用。如果你销毁所有这些,那么 C.l 也将被销毁。

Does a class attribute have the same lifetime as a global variable?

有点:类属性存在直到最后一个引用消失。全局变量也存在,直到最后一个引用消失。这些都不能保证持续整个程序的持续时间。

此外,在模块范围内定义的类一个全局变量。因此在这种情况下,类(以及隐含的属性)与全局变量具有相同的生命周期。

关于python - Python 类属性的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003390/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com