Почему использование 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 работает?

Ответы на вопрос(4)

Ваш ответ на вопрос