Ich habe Folgendes in der Konsole versucht:

>>> def f(l=[]):
...     l.append(1)
...     print(l)
...     del l
... 
>>> f()
[1]
>>> f()
[1, 1]

Was ich nicht verstehe, ist, wie der Interpreter nach der Löschanweisung immer noch dieselbe Liste l finden kann. Aus der Dokumentation sollte l=[] nur einmal ausgewertet werden.

1
Ronan Soares 19 Aug. 2020 im 15:38

2 Antworten

Beste Antwort

Die Variable ist nicht das Objekt. Bei jedem Aufruf der Funktion wird die lokale Variable l erstellt und (falls erforderlich) auf den Standardwert gesetzt.

Das Objekt [], das der Standardwert für l ist, wird erstellt, wenn die Funktion definiert wird, aber die Variable l wird jedes Mal erstellt, wenn die Funktion ausgeführt wird.

3
khelwood 19 Aug. 2020 im 12:51

Um ein Element für die Liste zu löschen, sollte del l[:] verwendet werden. Wenn Sie nur l verwenden, bleibt die Liste selbst.

def f(l=[]):
l.append(1)
print(l)
del l[:]
print(l)
>>> f()
[1]    #element in the list
[]     #list after deletion of the element
>>> f()
[1]
[]
>>> f()
[1]
[]
0
Smiley Face 19 Aug. 2020 im 13:13