Warum funktioniert das:Python Scheibe mit del Anweisung
del a[:]
löschen Sie alle Einträge in der Liste a
?
Soweit ich weiß, gibt a[:]
eine Kopie von a
zurück. Also sollte nicht del a[:]
die Kopie von a
löschen?
Warum funktioniert das:Python Scheibe mit del Anweisung
del a[:]
löschen Sie alle Einträge in der Liste a
?
Soweit ich weiß, gibt a[:]
eine Kopie von a
zurück. Also sollte nicht del a[:]
die Kopie von a
löschen?
del
ist eine spezielle Anweisung, die den ursprünglichen Wert überprüft und mit dem angegebenen Slice löscht.
Es ruft __delitem__
auf das Objekt und das Objekt selbst behandelt das Löschen.
Wenn Sie neugierig sind in Bezug auf den Betrieb unter der Haube passiert, können Sie gerne die folgende Klasse und verwenden Sie die del
Anweisung mit verschiedenen Scheiben oder Schlüsselreferenzen implementieren:
class A:
def __delitem__(self, key):
print(key)
Der Test im Interpreter :
>>> a = A()
>>> del a[:]
slice(None, None, None)
>>> del a[2]
2
>>> del a["test"]
test
Also wenn ich 'del a [:] '' '' '_ delitem __ (i)' für jedes 'i' innerhalb der Scheibe, aber wenn ich 'del a' tun lösche es nur das Objekt' a' selbst? – spiderface
@spiderface Übergibt 'slice (None, None, None)' an 'a .__ delitem__', wenn Sie' a [:] 'verwenden, aber wenn Sie' del a' löschen, löscht es tatsächlich das Objekt (durch Entfernen der Referenz und wenn keine andere Referenz existiert, ruft sie das Objekt "__del__" auf und löscht es. – Bharel
@spiderface: Nicht genau. Wenn Sie "del a" löschen, dann verschwindet dieser Verweis auf die "liste", aber wenn sie an anderer Stelle referenziert wird, sind diese Referenzen unverändert. 'del a [:]' gibt die Referenzen auf den Inhalt von 'a' frei, so dass sowohl' a' als auch jeder andere Verweis auf diese 'liste' nun eine leere' liste' anzeigt. – ShadowRanger
Weil das ist, was es definiert ist zu tun? 'del' ist eine Aussage, keine Funktion, also ist es nicht so, als ob man eine Scheibe an sie weitergibt. – jonrsharpe
'a [:]' gibt keine Kopie zurück, es gibt eine Scheibe zurück, zum Beispiel 'a [:] = [1,2]' ersetzt den Inhalt von 'a' nicht eine Kopie von' a'. In ähnlicher Weise wird "del" auf einer Scheibe als das Löschen der Elemente dieser Scheibe definiert. – AChampion