为什么在字典中向集合添加元素,所有集合都在修改? (蟒蛇)

时间:2014-09-06 23:49:54

标签: python dictionary set

我正在尝试向Python中的字典中的集合添加元素,但是当我使用mydictionary[index].update([newelement])时,所有字典都使用新元素进行更新。这里是python控制台命令和输出来演示我在说什么:

>>> graph=dict.fromkeys(range(10),set([]))
>>> graph
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>> graph[0].update([1])
>>> graph
{0: set([1]), 1: set([1]), 2: set([1]), 3: set([1]), 4: set([1]), 5: set([1]), 6: set([1]), 7: set([1]), 8: set([1]), 9: set([1])}

那么为什么不仅更新graph[0]的条目?

我真的试图专门找到这个问题的主题,但我找不到。

Obs:带有数字的括号是python控制台中的命令。

2 个答案:

答案 0 :(得分:1)

dict.fromkeys创建一个字典,其中包含您输入的第一个项目中的键以及 第二个元素的值。换句话说,所有值都引用相同的对象。

这与以下相同:

a = set()
b = a
b.add('foo')
print a

在这种情况下,您会发现ab都有一个元素'foo'。现在看看他们的ID:

print id(a)
print id(b)

请注意,它们是相同的数字,因为它们是同一个对象。

答案 1 :(得分:1)

变量graph不是10集,它是十元素字典,其中每个值都引用相同的集。因此,修改一组的内容会修改它们。

>>> graph=dict.fromkeys(range(10),set([]))
>>> id(graph[0]), id(graph[1])
(140681644256512, 140681644256512)