我在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