python的坑记录
在阅读别人博客的时候看到别人记录了一个python的坑,我觉得可能是一个今后会发生的一个错误,因此记录下来。直接上代码:
1 | def f(a, L=[]): |
打印出来的结果是:
1 | [1] |
这是因为, 作为默认参数, python在启动时就会将变量 L 建立, 我们在函数 f 内对 L 处理就会导致后来调用的 L 已经是修改过的 L 了, 我们可以通过打印 L 的内存地址来验证
1 | def f(a, L=[]): |
结果是
1 | 4513289600 |
简单来说,被声明的默认参数成了一个全局变量
当然, python的文档中也给出了一个推荐的方法:
If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:
1 | def f(a, L=None): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 念念不忘,必有回响!










