我在Python 2.7.12嵌套字典中看到了一個奇怪的行爲,我不明白它爲什麼會發生。讓說,我有這個詞典:帶有奇怪填充行爲的python嵌套字典
list_1 = ['5', '10', '15', '30']
dict_1 = { i:[] for i in list_1 }
現在我創建一個嵌套的字典是這樣的:
list_2 = ['a', 'b']
dict_2 = { i:dict_1 for i in list_2 }
和其他嵌套的字典是這樣的:
dict_3 = { i:{j:[] for j in list_1} for i in list_2 }
的dict_3和dict_2如果在填寫之前印刷,則是相同的:
{'a': {'15': [], '10': [], '30': [], '5': []}, 'b': {'15': [], '10': [], '30': [], '5': []}}
但是當我填寫的字典,如:
dict_2['a']['5'].append(1)
dict_3['a']['5'].append(1)
dict_2有,我不希望有一個行爲,請在 'A' 和 'B' 的灌裝機構 '5':
{'a': {'15': [], '10': [], '30': [], '5': [1]}, 'b': {'15': [], '10': [], '30': [], '5': [1]}}
dict_1在「A」,我想,僅填充元素的行爲「5」:我猜測,在dict_2嵌套dict_1僅僅是一個到詞典鏈接
{'a': {'15': [], '10': [], '30': [], '5': [1]}, 'b': {'15': [], '10': [], '30': [], '5': []}}
,而dict_3是一個真正的嵌套字典。那是對的嗎 ?無論如何,我覺得這個python dicts的使用很具誤導性,如果它不是bug,爲什麼在python中需要這種行爲?
你爲什麼覺得這很奇怪? 'dict_2'包含兩個對同一個'dict_1'的引用,而每次調用時,{}'理解都會創建一個新的字典。 – dhke
@dhke它對於來自語言分配可以複製數據的人來說很陌生。 – timgeb
@timgeb採取了點。 – dhke