Python dict.fromkeys返回相同的id元素

时间:2016-09-12 14:28:05

标签: python dictionary

当我在python上执行此操作时,我会一次更新所有键。

>>> base = {}
>>> keys = ['a', 'b', 'c']
>>> base.update(dict.fromkeys(keys, {}))
>>> base.get('a')['d'] = {}
>>> base
{'a': {'d': {}}, 'c': {'d': {}}, 'b': {'d': {}}}
>>> map(id, base.values())
[140536040273352, 140536040273352, 140536040273352]

如果我使用.get运算符代替[],则不会发生这种情况:

>>> base['a']['d'] = {}
>>> base
{'a': {'d': {}}, 'c': {}, 'b': {}}

为什么?

2 个答案:

答案 0 :(得分:0)

当您将新键的值初始化为{}时,将创建一个新词典,并且对该词典的引用将成为值。只有一个字典,所以如果你改了一个,你就会改变“全部”。

答案 1 :(得分:0)

我用Python 2.7.6和3.4.3尝试过。当使用get('a')['a']时,我会得到相同的答案。如果您能在最后验证这一点,请感谢您。 Python确实反对对象。因此,dict.fromkeys()重新使用相同的空dict进行初始化。要使每个对象成为一个单独的对象,您可以这样做:

base.update(zip(keys, ({} for _ in keys)))