亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新一個嵌套的 dict 也會更新另一個

更新一個嵌套的 dict 也會更新另一個

嚕嚕噠 2022-04-27 13:36:57
我有一個嵌套的字典,但是當我更新一個字典時,所有其他字典也會更新。我怎樣才能避免這種情況?下面是一個例子:a = {}b = {'d': [], 'e': []}a[1] = ba[2] = ba[1]['e'].append([1, 2, 3])# result: {1: {'e': [[1, 2, 3]], 'd': []}, 2: {'e': [[1, 2, 3]], 'd': []}}這里'e'更新了 1 和 2,但我只想更新 1:{1: {'e': [[1, 2, 3]], 'd': []}, 2: {'e': [], 'd': []}}
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

發生克隆更新是因為它們都是同一個字典,附加到不同的鍵。并非如此(如您所愿),每本字典都彼此不同。所以,如果你真的想要單獨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': []}}


查看完整回答
反對 回復 2022-04-27
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

這是預期的行為。當你這樣做時:


a = {}

b = {'d': [], 'e': []}

a[1] = b

a[2] = b

實際上,a[1] “持有”對 b 的引用。當您修改 a1 中的 b 時,您正在修改“原始”b。如果你想讓一個全新的 b 獨立修改,使用 copy。如果您的實際 dict 比這更復雜,您可以使用 deepcopy 或自己編寫一個復制功能。


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])

這可以按您的預期工作。


查看完整回答
反對 回復 2022-04-27
  • 2 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號