@delnan спасибо, это все объясняет.
жный дубликат:
«Наименьшее удивление» в Python: изменчивый аргумент по умолчанию
Рассмотрим следующую функцию:
def foo(L = []):
L.append(1)
print L
Каждый раз, когда я вызываю foo, он выводит новый список с большим количеством элементов, чем в прошлый раз, например:
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
Теперь рассмотрим следующую функцию:
def goo(a = 0):
a += 1
print a
При вызове его несколько раз мы получаем следующую картину:
>>> goo()
1
>>> goo()
1
>>> goo()
1
то есть он не печатает большее значение при каждом вызове.
В чем причина такого, казалось бы, противоречивого поведения?
Кроме того, как можно оправдать нелогичное поведение в первом примере, почему функция сохраняет состояние между вызовами?