如何解决使用fromkey和可变对象创建字典。一个惊喜?
您的Python 2.6示例与以下示例等效,这可能有助于阐明:
>>> a = []
>>> xs = dict.fromkeys(range(2), a)
结果字典中的每个条目都将引用同一对象。如您所见,使该对象发生变异的效果将在每个dict条目中可见,因为它是一个对象。
>>> xs[0] is a and xs[1] is a
True
使用dict理解,或者如果您使用Python 2.6或更早版本并且没有字典理解,则可以通过使用dict()
生成器表达式来获得dict理解行为:
xs = dict((i, []) for i in range(2))
解决方法
我在Python 2.6和3.2中遇到了让我感到惊讶的行为:
>>> xs = dict.fromkeys(range(2),[])
>>> xs
{0: [],1: []}
>>> xs[0].append(1)
>>> xs
{0: [1],1: [1]}
但是,dict
3.2中的理解显示出更礼貌的举止:
>>> xs = {i:[] for i in range(2)}
>>> xs
{0: [],1: []}
>>>
为什么会fromkeys
这样?
本文来自网友发布,不代表我们立场,转载联系作者并注明出处: