假设我有这样一个函数:
def test(t=[]):
t.append(1)
print(t)
如果我运行它几次,列表将像这样添加:
test() #[1]
test() #[1, 1]
那么这个列表存储在哪里?如果不在globals()
//locals()
中,则__dict__
函数也为空
找到了:
储存在__defaults__
这里你甚至可以将它设置为另一个元组
这是因为python解释器/编译器在编译时将默认值赋给参数。
这就是为什么默认参数应该是不可变的。
def test(t=None):
if t is None:
t = []
t.append(1)
print(t)