我正在尝试向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控制台中的命令。
答案 0 :(得分:1)
dict.fromkeys
创建一个字典,其中包含您输入的第一个项目中的键以及 第二个元素的值。换句话说,所有值都引用相同的对象。
这与以下相同:
a = set()
b = a
b.add('foo')
print a
在这种情况下,您会发现a
和b
都有一个元素'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)