我正在使用一个可变的数据结构,并注意到做d[mods_mutable()] = mods_mutable()]
的行为与
key = mods_mutable()
d[key] = mods_mutable()
很容易猜到发生了什么。快速访问一个临时文件和一个小测试确认:
x = 0
def f():
global x
x += 1
return x
d = dict()
d[f()] = f()
print d
运行它,我们得到{2: 1}
. 显然,密钥的值是第二次评估哪种有意义(如果我们得到一个异常或这样的获取值,那么创建密钥的意义何在?)。
这种行为是否记录在案?我在官方文档上找不到任何东西,谷歌搜索也没有解决我的问题。无论实施和版本如何,我们都能保证这个顺序吗?还有更多这样的陷阱需要注意吗?