Warum behebt die Verwendung von None das Problem mit dem veränderlichen Standardargument von Python?

Ich bin an dem Punkt, an dem ich Python lerne, mit dem ich es zu tun habedas Mutable Default Argument Problem.

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

ich verstehe dasa_list wird nur initialisiert, wenn diedef Anweisung wird zuerst angetroffen, und deshalb nachfolgende Aufrufe vonbad_append Verwenden Sie dasselbe Listenobjekt.

Was ich nicht verstehe, ist warumgood_append funktioniert anders. Es sieht aus wiea_list würdeimmer noch nur einmal initialisiert werden; deshalb, dieif Aussage wäre nur beim ersten Aufruf der Funktion wahr, alsoa_list würde nur zurückgesetzt werden[] beim ersten Aufruf, dh es würde sich immer noch die gesamte Vergangenheit ansammelnnew_item Werte und immer noch fehlerhaft sein.

Warum ist es nicht? Welches Konzept vermisse ich? Wie geht das?a_list werde jedes Mal sauber gewischtgood_append läuft?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage