Wie lösche ich jede Referenz eines Objekts in Python?

7

Zeigen Sie etwas wie:

%Vor%

Wie können Sie das Objekt nur mit einer Referenz löschen, sagen wir x?

del x wird nicht ausreichen; das Objekt ist beispielsweise immer noch von b aus erreichbar.

    
Juanjo Conti 10.06.2010, 09:48
quelle

3 Antworten

11

Nein nein nein. Python hat einen Garbage Collector, der sehr starke Territory-Probleme hat - es wird Sie nicht mit der Erstellung von Objekten verwirren, Sie werden nicht damit beschäftigt Objekte zu löschen.

Einfach gesagt, es kann nicht getan werden, und zwar aus einem guten Grund.

Wenn Ihr Bedarf zum Beispiel von Caching-Algorithmen stammt, die Verweise enthalten, aber nicht verhindern sollte, dass Daten gesammelt werden, wenn sie nicht verwendet werden, sollten Sie sich weakref .

    
abyx 10.06.2010 11:44
quelle
7

Die einzige Lösung, die ich gerade sehe, ist, dass Sie sicherstellen sollten, dass Sie den einzigen Verweis auf x haben, alle anderen müssen nicht bekommen x selbst aber eine schwache Referenz, die auf x zeigt. Schwache Referenzen werden im weakref -Modul implementiert und Sie können es folgendermaßen verwenden:

%Vor%

Beachten Sie jedoch, dass nicht alle Klassen schwach referenziert werden können. Insbesondere können die meisten integrierten Typen nicht. Einige integrierte Typen können schwach referenziert werden, wenn Sie sie unterklassieren (wie dict ), andere nicht (wie int ).

    
Tamás 10.06.2010 12:54
quelle
5

Sie nicht. Das ist der ganze Punkt. Stellen Sie sich vor, dass sich l in einer Bibliothek außerhalb Ihrer Kontrolle befindet. Es ist zu erwarten, dass die Sammlungselemente nicht verschwinden.

Stellen Sie sich auch vor, es wäre anders. Sie haben Fragen hier zu SO "Wie verhindere ich, dass andere meine Objekte löschen?". Als Sprachdesigner können Sie nicht beide Anforderungen erfüllen.

    
MSalters 10.06.2010 11:40
quelle

Tags und Links