用Python3的Dict作为函数参数的一个陷阱

今天遇到了个大坑。所以要记录一下。
在python3中,如果给函数参数添加默认值,在用到Dict时候一定要小心。

1
2
3
4
5
6
def f(value, key, hash={}):
hash[value] = key
return hash

print(f('a', 1))
print(f('b', 2))

你觉得是

1
2
{'a': 1}
{'b': 2}

但结果确是

1
2
{'a': 1}
{'a': 1, 'b': 2}

因为python会直接把你更改过的default的值保存到下一次call。

使用None可以避免这个问题。

参考