2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
發(fā)生克隆更新是因?yàn)樗鼈兌际峭粋€(gè)字典,附加到不同的鍵。并非如此(如您所愿),每本字典都彼此不同。所以,如果你真的想要單獨(dú)dict的 s,這里有一種方法:
In [57]: def getDict():
...: return {'d':[],'e':[]}
...:
In [58]: a={}
In [59]: a[1] = getDict()
In [60]: a[2] = getDict()
In [61]: a[1]['e'].append([1,2,3])
In [62]: a
Out[62]: {1: {'d': [], 'e': [[1, 2, 3]]}, 2: {'d': [], 'e': []}}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是預(yù)期的行為。當(dāng)你這樣做時(shí):
a = {}
b = {'d': [], 'e': []}
a[1] = b
a[2] = b
實(shí)際上,a[1] “持有”對(duì) b 的引用。當(dāng)您修改 a1 中的 b 時(shí),您正在修改“原始”b。如果你想讓一個(gè)全新的 b 獨(dú)立修改,使用 copy。如果您的實(shí)際 dict 比這更復(fù)雜,您可以使用 deepcopy 或自己編寫(xiě)一個(gè)復(fù)制功能。
a = {}
b = {'d': [], 'e': []}
a[1] = b.copy()
a[2] = b.copy()
a[1]['e'].append([1, 2, 3])
你也可以這樣做:
a = {}
b = {'d': [], 'e': []}
a[1] = b[:]
a[2] = b[:]
a[1]['e'].append([1, 2, 3])
這可以按您的預(yù)期工作。
添加回答
舉報(bào)