1. 首页 > 开发编程

使用fromkey和可变对象创建字典。一个惊喜

如何解决使用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]}

但是,dict3.2中的理解显示出更礼貌的举止:

>>> xs = {i:[] for i in range(2)}
>>> xs
{0: [],1: []}
>>>

为什么会fromkeys这样?

本文来自网友发布,不代表我们立场,转载联系作者并注明出处:

使用fromkey和可变对象创建字典。一个惊喜