1
在下面的代碼中,我期待每次在for循環中創建一個名爲'obj'的MyClass新實例。因此,每次輸出應爲[1]。但obj.mylist似乎增長。我錯過了什麼?爲什麼一個實例變量是一個列表,在for循環中增長?
class MyClass:
def __init__(self, mylist_=[]):
self.mylist = mylist_
def addData(self):
self.mylist.append(1)
for i in range(5):
obj = MyClass()
obj.addData()
print obj.mylist
輸出是:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
有一個很好的邏輯解釋http://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument – skovorodkin
@Andrew L - 不,這裏的問題是使用mutable默認的論點,而不是這個問題的問題。 – bgporter
@bgporter是的,我的壞。收縮CV – Li357