Почему использование None решает проблему непостоянных аргументов Python по умолчанию?
Я нахожусь в точке изучения Python, где я имею дело спроблема изменяемого аргумента по умолчанию.
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
Я это понимаюa_list
инициализируется только тогда, когдаdef
заявление встречается впервые, и поэтому последующие вызовыbad_append
использовать тот же объект списка.
Что я не понимаю, так это почемуgood_append
работает по-другому. Это выглядит какa_list
было быstill быть инициализированным только один раз; Следовательноif
утверждение будет верно только при первом вызове функции, то естьa_list
будет только сбросить до[]
при первом вызове, то есть все равно накопитnew_item
значения и по-прежнему глючить.
Почему это не так? Какую концепцию мне не хватает? Какa_list
стирать каждый разgood_append
работает?