Objekte richtig löschen nicht nur Referenz

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DKKA
User
Beiträge: 45
Registriert: Freitag 18. Oktober 2013, 14:20

Hallo,

Ich programmiere gerade einen Sudoku-Solver mittels Dancing Links. Dabei erzeuge ich ein selbstgeschriebenes "Node"-Objekt und füge es jeweils in eine horizontale und vertikale DoublyLinked-List. Nun möchte ich das Objekt so löschen, dass es aus beiden Listen verschwindet. Leider funktioniert das mit dem del keyword nicht.
sprich:
y = Node()
x = y
del y
löscht leider nicht das Objekt, sondern nur die Referenz. Ich habe keine Ahnung wie ich das in Python löse. Komme aus der C++-Ecke.
Vielen Dank für eure Hilfe!!!
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Du musst dafür sorgen, dass keine Referenzen (Python: Namen, entfernt vergleichbar mit std::shared_ptr) mehr auf das Objekt verweisen. Dann kann es vom GC abgeräumt werden.

Deine Listen enthalten auch nicht die Objekte selbst, sondern lediglich Verweise. Entferne (remove)beide und Dein Objekt wird irgendwann den Aufstieg ins Datennirvana schaffen.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo DKKA,
Python verhält sich auch nicht anders als C++ in diesem Punkt. Solange noch Pointer in C++ auf das gelöschte Objekt zeigen kann man noch darauf zugreifen, es besteht nur die Gefahr, dass dieser Speicherbereich irgendwann überschrieben wird. Anders ausgedrückt: Wenn Du in C++ ein Objekt freigibst, auf das noch Referenzen zeigen, hast Du ein großes Problem, in Python nur Speicher belegt.
Antworten