Аргумент по умолчанию в Python - это любой объект, который был установлен при определении функции, даже если вы установили изменяемый объект. Этот вопрос должен объяснить, что это значит и почему Python является таким вопросом Наименьшее удивление в Python: изменяемый аргумент по умолчанию .
По сути, каждый раз, когда вызывается функция, используется один и тот же объект по умолчанию, а не новая копия, создаваемая каждый раз. Например:
>>> def f(xs=[]):
... xs.append(5)
... print xs
...
>>> f()
[5]
>>> f()
[5, 5]
Самый простой способ обойти это - установить действительный аргумент по умолчанию None
, а затем просто проверить None
и указать значение по умолчанию в функции, например:
>>> def f(xs=None):
... if xs is None:
... xs = []
... xs.append(5)
... print xs
...
>>> f()
[5]
>>> f()
[5]