2016-08-31 4 views
3

So neugierig bin ich können sagen, dass ich eine Klasse, alsWann soll ich del in python benutzen?

class myClass: 
    def __init__(self): 
     parts = 1 
     to = 2 
     a = 3 
     whole = 4 
     self.contents = [parts,to,a,whole] 

folgt Gibt es eine benifit der Zugabe Linien

del parts 
del to 
del a 
del whole 

innerhalb des Konstruktors oder wird der Speicher für diese Variablen durch den Umfang verwaltet werden ?

+4

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. –

+0

nie, es gibt eine Müllsammlung – PYPL

+0

Related: http://stackoverflow.com/questions/34430314/python-lifetime-memory-scope-of-local-variables-inside-a-funktion –

Antwort

8

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.

+0

+1, dies ist eine großartige Erklärung über die falschen Gründe, 'del' auf lokalen Variablen zu verwenden. Es würde weiter verbessert werden, indem auch die Frage in der Zusammenfassung beantwortet wird, wenn "del" * verwendet werden soll (z. B. Löschen von Dingen aus Listen, diktieren, Löschen von Attributen ...). – user4815162342

+4

Ein wichtiger Zusatz zur Tatsache, dass 'del' einen Verweis auf einen Wert löscht: Wenn dieser Wert neben dem zu löschenden Verweis noch andere Referenzen hat, wird er weiterleben. Sie können also nicht wirklich an 'del' denken, um Speicher freizugeben, wenn Sie nicht sicher sind, dass es keine anderen Referenzen gibt. – kindall

-1

Eine Verwendung besteht darin, bestimmte Schlüssel aus einem Wörterbuch zu löschen.

>>>> food = {"apple": True, "banana": False} 
>>>> del food['banana'] 
>>>> import json 
>>>> json.dumps(food) 
'{"apple": true}' 

Ich benutze es die ganze Zeit für die Bereinigung von Wörterbüchern vor der Umwandlung in JSON.

+2

Ja, das ist nicht wirklich der Punkt meiner Frage, danke fürs Lesen zumindest der Titel tho ... – kpie

Verwandte Themen