def f(val=[]):val.append(1)return valprint(f(), f())
输出:
[1, 1] [1, 1]
这是因为Python函数默认参数如果是可变对象始终是同一个,修改一个其它也会跟着变。所以不建议默认参数用可变对象,防止出现意外的值。
至于为什么不是[1],[1,1]
,是因为两个f()执行完了再print的,此时两个f()返回的都是同一个列表。如果分成两个print才是[1],[1,1]
:
def f(val=[]):val.append(1)return valprint(f())
print(f())
输出:
[1]
[1, 1]