gpt4 book ai didi

python - 使用 fromkeys 和可变对象创建字典。惊喜

转载 作者:IT老高 更新时间:2023-10-28 21:01:51 26 4
gpt4 key购买 nike

我在 Python 2.6 和 3.2 中遇到了这种令我惊讶的行为:

>>> xs = dict.fromkeys(range(2), [])
>>> xs
{0: [], 1: []}
>>> xs[0].append(1)
>>> xs
{0: [1], 1: [1]}

但是,3.2 中的 dict 推导式表现出更加礼貌的举止:

>>> xs = {i:[] for i in range(2)}
>>> xs
{0: [], 1: []}
>>> xs[0].append(1)
>>> xs
{0: [1], 1: []}
>>>

为什么 fromkeys 会这样?

最佳答案

您的 Python 2.6 示例等效于以下内容,这可能有助于澄清:

>>> a = []
>>> xs = dict.fromkeys(range(2), a)

结果字典中的每个条目都将引用同一个对象。正如您所见,改变该对象的效果将通过每个 dict 条目可见,因为它是一个对象。

>>> xs[0] is a and xs[1] is a
True

使用字典推导,或者如果你被困在 Python 2.6 或更早版本并且没有字典推导,你可以通过使用 dict() 和生成器来获得字典推导行为表达式:

xs = dict((i, []) for i in range(2))

关于python - 使用 fromkeys 和可变对象创建字典。惊喜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174723/

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