可能重複:
「Least Astonishment」 in Python: The Mutable Default Argument在蟒蛇__init__字典參數默認爲以前的類值
我發現,字典的參數給INIT()函數我的課是默認爲我之前在前面的例子中設置的值。我真的不明白這種行爲,而且它似乎沒有發生在列表或基本變量上。示例代碼:
class TestClass:
def __init__(
self,
adir={},
alist=[],
avar=None
):
print("input adir: " + str(adir)) #for test2, shows test1.mydir
self.mydir = adir
self.mylist = alist
self.myvar = avar
test1 = TestClass()
test1.mydir['a'] = 'A'
test1.mylist = ['foo']
test1.myvar = 5
test2 = TestClass()
print(test2.mydir) #has same value of test1!
print(test2.mylist)
print(test2.myvar)
輸出看起來像這樣: 初始化TEST1 輸入ADIR:{} 初始化TEST2 輸入ADIR:{ '一個': 'A'} { 'A': 'A' } [] 無 爲什麼test2的字典參數(adir)被設置爲test1.mydir?特別是,爲什麼行爲與其他可變類型如列表不同?
謝謝!
是'mydir'行爲不同於'mylist'是你設置*元素* test1.mydir'的'但是你更換'test1.mylist'的唯一原因。否則,這又是可變的默認參數問題。 – DSM