擅长:python、mysql、java
<p>当你说</p>
<pre><code>class Foo:
ls=[]
</code></pre>
<p><code>ls</code>被定义为类变量,您创建的所有对象都将有一个同名的变量,并且该变量将指向类的<code>ls</code>值中的当前值。你知道吗</p>
<p>当你说</p>
<pre><code>f1.ls.append(1)
</code></pre>
<p>实际上,您正在对原始对象进行变异。这就是为什么变化也反映在<code>f2</code>中(因为它们都引用同一个对象)。但当你说</p>
<pre><code>f2.ls = []
</code></pre>
<p>实际上,您正在<code>f2</code>对象上创建一个变量,该对象引用一个空列表对象。现在,<code>ls</code>对象不同于<code>f1</code>的ls。你可以用这句话来证实这一点</p>
<pre><code>print f1.ls is f2.ls # Will print False
print f1.ls is Foo.ls # Will print True
</code></pre>
<p>如果你真的想在你创建一个对象的时候得到一个新的对象。必须创建一个实例变量,如下所示</p>
<pre><code>class Foo:
def __init__(self):
self.ls = []
f1, f2 = Foo(), Foo()
print f1.ls is f2.ls # Will print False
</code></pre>
<p>现在将<code>ls</code>绑定到类的当前实例并使其指向空列表。所以,这对于每个实例都是不同的。你知道吗</p>