Niemals, es sei denn, Sie sind sehr eng an Speicher und tun etwas sehr sperrig. Wenn Sie übliches Programm schreiben, sollte Garbage Collector sich um alles kümmern.
Wenn Sie etwas sperriges schreiben, sollten Sie wissen, dass del
das Objekt nicht löscht, es deneferenziert es nur. I.e. Variable bezieht sich nicht mehr auf den Ort im Speicher, an dem Objektdaten gespeichert sind. Danach muss es noch von Garbage Collector aufgeräumt werden, damit der Speicher frei wird (das passiert automatisch).
Es gibt auch eine Möglichkeit, den Garbage Collector zum Bereinigen von Objekten zu zwingen - gc.collect()
, was nützlich sein kann, nachdem Sie del
ausgeführt haben. Zum Beispiel:
import gc
a = [i for i in range(1, 10 ** 9)]
...
del a
# Object [0, 1, 2, ..., 10 ** 9 - 1] is not reachable but still in memory
gc.collect()
# Object deleted from memory
aktualisieren: wirklich gute Note in den Kommentaren. Achten Sie auf andere Referenzen auf das Objekt im Speicher. Zum Beispiel:
import gc
a = [i for i in range(1, 10 ** 9)]
b = a
...
del a
gc.collect()
Nach der Ausführung dieser Blöcke ist die große Palette noch erreichbar durch b
und wird nicht gereinigt werden.
Nein. Der Interpreter wird die Variablen automatisch freigeben, sobald sie außerhalb des Gültigkeitsbereichs sind, d. H. Sobald der Konstruktor zurückkehrt. "del" ist sehr selten nützlich. –
nie, es gibt eine Müllsammlung – PYPL
Related: http://stackoverflow.com/questions/34430314/python-lifetime-memory-scope-of-local-variables-inside-a-funktion –