这是蟒蛇的陷阱之一。
空列表的默认参数是在函数定义中创建的。它在函数调用之间仍然存在。
>>> def test_func(param=[]):
... param.append(1)
... print(param)
...
>>> test_func()
[1]
>>> test_func()
[1, 1]
>>> test_func()
[1, 1, 1]
>>> test_func()
[1, 1, 1, 1]
>>> test_func()
[1, 1, 1, 1, 1]
>>> test_func()
[1, 1, 1, 1, 1, 1]
如果你看你的输出,你会看到重复的。每条路径存在两次。如果你再运行一次,它应该有三个重复每个,以此类推。这只适用于可变类型。所以像列表和字典之类的东西会表现出这种行为。如果不打算使用此行为,请避免将其用作默认参数。
而是使用将默认参数设置为None并在函数体中选中它。
>>> def test_func2(param=None):
... if param is None:
... param = []
... param.append(1)
... print(param)
...
>>> test_func2()
[1]
>>> test_func2()
[1]
>>> test_func2()
[1]