擅长:python、mysql、java
<p>你问了几个问题。在</p>
<blockquote>
<p>What's the lifetime of a class attribute, in Python?</p>
</blockquote>
<p>只要有对类属性的引用,类属性就会一直存在。因为类持有一个引用,所以假设类继续持有引用,它将至少和类的生命一样长。另外,由于每个对象都有一个引用,所以它至少和所有对象一样长,假设每个对象都继续保持引用。在</p>
<blockquote>
<p>Am I guaranteed <code>C.l</code> will hold <code>[5]</code>?</p>
</blockquote>
<p>在你描述的假设中,是的。在</p>
<blockquote>
<p>Or is it possible that the class itself and its class attributes might get garbage-collected, and then <code>C.l = []</code> executed a second time later?</p>
</blockquote>
<p>而不是假定您能够构造<code>C</code>的实例。如果您能够构造<code>C</code>的第二个实例,那么<code>C</code>必须存在,<code>C.l</code>也必须存在</p>
<blockquote>
<p>Is the lifetime of a class attribute "forever"?</p>
</blockquote>
<p>不,类属性的生存期遵循任何对象的生存期规则。只要对它的引用存在,它就存在。在<code>C.l</code>的情况下,类中存在一个引用,每个实例中都存在一个引用。如果你销毁了所有这些,那么{<cd4>}也将被销毁。在</p>
<blockquote>
<p>Does a class attribute have the same lifetime as a global variable?</p>
</blockquote>
<p>在最后一个引用消失之前,类属性一直存在。全局变量也存在,直到最后一个引用消失。这两种方法都不能保证在整个项目期间持续。在</p>
<p>同样,在模块作用域<strong>定义的类是一个全局变量。因此,在这种情况下,类(以及属性)与全局变量具有相同的生存期。在</p>