跳至正文
Python 的 dict.fromkeys 的坑

Python 的 dict.fromkeys 的坑

注意:此文章已超过 1 年未更新,部分信息可能已经过时。

目前使用到 dict.fromkeys 方法主要有两个场景:一个是按照数组的原有顺序去重,另一个就是正常的根据 keys 构建一个 dict,这里讨论的是第二种情况。

下面这个例子:

python
l = ["foo", "bar"]
v = {"age": 0}

d = dict.fromkeys(l, v)

d["foo"]["age"] += 1
d["bar"]["age"] += 1

d["foo"]["age"]

由于 Python 在 v 处存储的是引用而不是值的原因,故 d["foo"]["age"] 最终的值为 2,如果用 id() 方法打印两个对象的地址,可以发现是同一个值。

python
print(id(d["foo"]["age"]))
print(id(d["bar"]["age"]))

# 140648770627920
# 140648770627920

要解决这个问题,可以适当改一下写法,不使用 fromkeys() 方法初始化类似结构或者避免在 fromkeys 的参数里设置一个引用类型的对象,不然的话属于高危操作了,使用时需要格外注意。

本文共 222 字,以 CC 署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可。

评论

博客助手

正在打开博客助手…