def foo (num=[]):
num.append(1)
print num
foo()
[1]
foo()
[1,1]
foo()
[1,1,1]
在python里,函数的默认值是在函数被定义的时候实例化的,而不是在调用的时候。
在每次给函数指定一个 默认值 的时候,python都会把这个值给储存下来。如果在调用的时候重写了这个 默认值 ,那储存下来的值就不会被使用了。不重写的时候,就会让 默认值引用存储的值 ,如上面这个例子,使用默认参数的时候,都会引用之前存储的num,而num是list类型,为 可变类型 ,能够被修改。所以会出现上面的那种结果。