本質上我試圖給嵌套字典賦值。如果我通過拼寫出來構建詞典,那麼稍後分配一個值就可以按預期工作。但是,如果我創建了一個模板字典,請將其分配給所有鍵,然後再返回並嘗試爲嵌套鍵分配一個值,現在該鍵的每個實例都會獲取該值。更方便地顯示與代碼:爲嵌套字典分配值被不恰當地應用於所有鍵
initialize_dict = {'a':0,'b':0}
x = {}
x['FOO'] = initialize_dict
x['BAR'] = initialize_dict
y = {'FOO':{'a':0,'b':0},'BAR':{'a':0,'b':0}}
logging.info("x is {}".format(x))
logging.info("y is {}".format(y))
logging.info(x==y)
x['FOO']['a']=13231
y['FOO']['a']=13231
logging.info("new x is {}".format(x))
logging.info("new y is {}".format(y))
而且我的日誌:
INFO:root:x is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:y is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:True
INFO:root:new x is {'FOO': {'a': 13231, 'b': 0}, 'BAR': {'a': 13231, 'b': 0}}
INFO:root:new y is {'FOO': {'a': 13231, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
正如你所看到的,由於某種原因,價值13231被分配以x爲[「富」] [「一」 ]和['BAR'] ['a']如果我使用模板構建它,但是如果我已經寫出了完整的字典(以y開頭)。我在上面進行測試以確保x和y在嘗試賦值之前是真正等價的。
看initialize_dict的價值,你可能會感到驚訝。 –