<blockquote>
<p><strong>Possible Duplicate:</strong><br/>
<a href="https://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument">“Least Astonishment” in Python: The Mutable Default Argument</a> </p>
</blockquote>
<p>今天下午我在写一些代码,在我的代码中偶然发现了一个bug。我注意到我新创建的一个对象的默认值是从另一个对象继承过来的!例如:</p>
<pre><code>class One(object):
def __init__(self, my_list=[]):
self.my_list = my_list
one1 = One()
print(one1.my_list)
[] # empty list, what you'd expect.
one1.my_list.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>('hi')
print(one1.my_list)
['hi'] # list with the new value in it, what you'd expect.
one2 = One()
print(one2.my_list)
['hi'] # Hey! It saved the variable from the other One!
</code></pre>
<p>所以我知道可以通过这样做来解决:</p>
^{pr2}$
<p>我想知道的是。。。为什么?为什么Python类的结构是在类的实例之间保存默认值?在</p>
<p>提前谢谢!在</p>