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

浏览:37日期:2024-03-08
如何解决使用fromkey和可变对象创建字典。一个惊喜?

您的Python 2.6示例与以下示例等效,这可能有助于阐明:

>>> a = []>>> xs = dict.fromkeys(range(2), a)

结果字典中的每个条目都将引用同一对象。如您所见,使该对象发生变异的效果将在每个dict条目中可见,因为它是一个对象。

>>> xs[0] is a and xs[1] is aTrue

使用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这样?

相关文章: