gpt4 book ai didi

python - 来自 dict.fromkeys 的不良行为

转载 作者:IT老高 更新时间:2023-10-28 20:45:44 27 4
gpt4 key购买 nike

我想使用 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] 的集合。当然,我可以通过在没有 fromkeys 的情况下初始化 x 来避免这个问题,但是我想了解我在这里缺少什么。

最佳答案

dict.fromkeys 的第二个参数只是一个值。您已经创建了一个字典,其中 same 设置为每个键的值。想必你了解它的工作原理:

>>> a = set()
>>> b = a
>>> b.add(1)
>>> b
set([1])
>>> a
set([1])

您在那里看到了相同的行为;在您的情况下, x[0]x[1]x[2] (等)都是访问确切内容的不同方式相同的 set 对象。

对于字符串表示形式包括其内存地址的对象,这更容易看到,您可以看到它们是相同的:

>>> dict.fromkeys(range(2), object())
{0: <object object at 0x1001da080>,
1: <object object at 0x1001da080>}

关于python - 来自 dict.fromkeys 的不良行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com