【发布时间】:2022-01-25 20:19:12
【问题描述】:
我想使用 dict.fromkeys 初始化一个集合字典(在 Python 2.6 中),但结果结构的行为很奇怪。更具体地说:
>>>> 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必须使用赋值将集合与每个键相关联,但正如您所见,这不会复制集合。除了以不同的方式创建字典之外,我不确定如何解决这个问题。
标签: python