Dlaczego używanie None naprawia zmienny domyślny argument Pythona?

Jestem w trakcie nauki Pythona, z którym mam do czynieniaProblem z argumentem Mutable Default.

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

Rozumiem, żea_list jest inicjowany tylko wtedy, gdydef po raz pierwszy napotkano instrukcję i dlatego kolejne wywołaniabad_append użyj tego samego obiektu listy.

Nie rozumiem, dlaczegogood_append działa inaczej. To wygląda jaka_list bynadal być inicjowane tylko raz; Dlatego teżif stwierdzenie byłoby prawdziwe tylko przy pierwszym wywołaniu funkcji, czylia_list zostanie zresetowany tylko do[] przy pierwszej inwokacji, co oznacza, że ​​nadal będzie gromadzić całą przeszłośćnew_item wartości i nadal być buggy.

Dlaczego tak nie jest? Jakiego pojęcia brakuje? Jaka_list za każdym razem staraj się go wyczyścićgood_append biegnie?

questionAnswers(4)

yourAnswerToTheQuestion