我想用dict.fromkeys
初始化集合的字典(在Python 2.6中),但生成的结构行为奇怪。更具体地讲:来自dict.fromkeys的不想要的行为
>>>> x = {}.fromkeys(range(10), set([]))
>>>> x
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>>> x[5].add(3)
>>>> x
{0: set([3]), 1: set([3]), 2: set([3]), 3: set([3]), 4: set([3]), 5: set([3]), 6: set([3]), 7: set([3]), 8: set([3]), 9: set([3])}
我显然不希望增加3到所有套,只相当于x[5]
设定。当然,我可以通过初始化x
而不用fromkeys
来避免这个问题,但我想了解我在这里错过了什么。
它们都是一样的。集合,列表,字典和任何其他对象都是引用类型,当您将它们分配给另一个变量时,只复制引用,而不是实际对象。 'fromkeys'必须使用赋值将该组与每个键相关联,但正如您所看到的,这不会复制该组。我不知道如何解决这个问题,除了以不同的方式创建字典。 – 2010-06-08 19:19:20