这个问题是因为python函数参数的默认值是在创建函数时就生成了的,并保存在函数内部,而不是调用函数时再生成。
当第一次调用函数对默认值的列表添加了内容,下一次再调用函数时默认值的列表还是上次添加了内容的那个,而不是再生成一个新的列表。
所以函数每次返回的都是同一个列表的引用地址
def fun(ls=[]):
print(id(ls))
ls.append(1)
return ls
a=fun()
b=fun()
print(a,b)
可以看到,形参的默认值内存地址是不变的,所以。。。你懂得
这里主要是使用了默认参数是可变对象, 所以, 两个变量其实是指向同一个对象的