Seite 1 von 1
Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 25. November 2010, 14:37
von ravenheart
Code: Alles auswählen
class A:
def __init__(self):
self.a ="a"
def more(self):
a = A()
a.a = self.a + "a"
return a
a = A()
b = a.more().more().more()
Das Beispiel hat eig in der Form keine Praxisrelevanz, allerdings zeigt es mein Problem grad schön
a.more() ergibt eine neue Instanz von A.
a.more().more() ebenfalls
Diese beiden werden aber keiner Variablen zugewiesen.
Wann hören diese Objekte auf zu existieren?
(Oder existieren sie jemals?)
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 25. November 2010, 14:48
von BlackJack
@ravenheart: Natürlich existieren sie, sonst könntest Du ja die Methode darauf nicht aufrufen. Wie lange sie existieren ist abhängig von der Python-Implementierung.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 25. November 2010, 16:19
von DasIch
Du musst davon ausgehen dass sie fuer immer existieren wie in jeder anderen Sprache mit GC auch.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Dienstag 30. November 2010, 14:51
von Py-Prog
ravenheart hat geschrieben:Wann hören diese Objekte auf zu existieren?
Wenn du den PC ausschaltest.

Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 04:04
von syntor
In der Regel werden die Objekte zur gargabe collection freigegeben, sobald sie "out of scope" gehen, also der Referenzzähler bei Null angelangt ist.
http://docs.python.org/library/sys.html#sys.getrefcount
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 08:34
von snafu
@syntor:
Wobei man natürlich erwähnen sollte, dass Freigabe für den GC != promptes Enfernen aus dem Speicher. Denn bekanntlich sammelt der GC von CPython die Objekte aus Optimierungsgründen generationsweise ein. Bei anderen Implementierungen mag das Verhalten zudem noch ganz anders aussehen. Man kann sich also nicht darauf verlassen, dass der Speicher schon in dem Moment freigegeben wird, wo das Objekt sozusagen gerade "out of scope" gegangen ist. Eher ist dies der frühestmögliche Zeitpunkt für das Einsammeln. Im "schlimmsten" Fall kann es sogar sein, dass die Speicherfreigabe nie bzw erst mit Beenden des Interpreters erfolgt.
Bei einer Sprache mit automatischer Speicherbereinigung sollte man daher gar nicht erst auf die Idee kommen, jedwedes Verhalten des GCs mit einzuplanen. Wenn man denn unbedingt damit "konkurrieren" will, dann möchte man sich vielleicht mal das Modul
gc anschauen, das Zugriff auf das Interface des Collectors bietet.
Ich glaube aber, man muss bei dieser Frage prinzipiell unterscheiden zwischen "Existenz" im Sinne von "Speicherbelegung" oder "Existenz" im Sinne von "Erreichbarkeit". Hier nehme ich an, dass eher Letzteres gemeint war.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 11:31
von sma
Eine gleichwertige Frage ist: Wann geht im Kühlschrank das Licht aus?
Ist die Tür auf, ist Licht an. Wenn man die Tür zu macht, sieht man das Licht nicht mehr. Ist es aus? Man weiß es nicht. Ein "vernünftiger" Kühlschrank würde das Licht aus Effizienzgründen sicherlich sofort löschen, doch es könnte auch weiter brennen oder vielleicht erst später ausgehen, um eine Energiesparlampe nicht zu überstrapazieren oder für ein besseres Mikroklima zu sorgen oder was weiß ich. Entscheidend für mich ist: Wenn die Tür zu ist, brennt es für mich nicht mehr (und erleuchtet die dunkle Küche in der Nacht), ist damit per definitionem aus (denn die Küche ist dunkel).
Genauso ist es auch mit Objekten unter einem Garbage Collector. Kann ich sieh nicht mehr sehen (erreichen) sind sie per definitionem weg - egal ob ihr Speicherplatz schon wiederverwendet wurde oder nicht.
Stefan
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 14:36
von Py-Prog
@sma man weiß doch ob im kühlschrank das lichtausgeht, wenn man die Tür schließt drückt die gegen eine schalter und das licht geht aus, drückt man mit der hand dagegen geht es auch aus.

(Wer's mir nicht glaubt kann's ja selber ausprobieren...)
EDIT: 300 Beitrag
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 14:42
von jbs
Py-Prog hat geschrieben:@sma man weiß doch ob im kühlschrank das lichtausgeht, wenn man die Tür schließt drückt die gegen eine schalter und das licht geht aus, drückt man mit der hand dagegen geht es auch aus.

(Wer's mir nicht glaubt kann's ja selber ausprobieren...)
EDIT: 300 Beitrag
Vielleicht in deinem Kühlschrank! Du hast das Beispiel von sma nicht verstanden, oder?
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 15:49
von Py-Prog
Ist's bei deinem Kühlschrank den nicht so?
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 15:58
von lunar
@Py-Prog: Nein, in meinem Kühlschrank ist das nicht so. Dessen Licht wird nämlich von einem Hamster in einem Laufrad produziert, und der hat so viel Spaß am Laufen, dass er immer weiter läuft, auch wenn die Tür zu ist. Er ist übrigens top-fit, dieser Hamster. Blöd ist nur, dass man nachts kein Licht im Kühlschrank hat, weil dann der Hamster schläft.
Im Ernst, das Licht im Kühlschrank war eine Analogie, überlege doch mal, was sma damit sagen wollte (Hinweis: Es geht nicht um Kühlschränke, und schon gar nicht darum, ob das Licht jetzt tatsächlich ausgeht oder nicht).
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 16:15
von jbs
lunar hat geschrieben:@Py-Prog: Nein, in meinem Kühlschrank ist das nicht so. Dessen Licht wird nämlich von einem Hamster in einem Laufrad produziert, und der hat so viel Spaß am Laufen, dass er immer weiter läuft, auch wenn die Tür zu ist. Er ist übrigens top-fit, dieser Hamster. Blöd ist nur, dass man nachts kein Licht im Kühlschrank hat, weil dann der Hamster schläft.
Im Ernst, das Licht im Kühlschrank war eine Analogie, überlege doch mal, was sma damit sagen wollte (Hinweis: Es geht nicht um Kühlschränke, und schon gar nicht darum, ob das Licht jetzt tatsächlich ausgeht oder nicht).
Jetzt weiß ich auch warum der Kühlschrank manchmal so laut ist. Ich sollte mal das Laufrad ölen.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 16:17
von cofi
lunar hat geschrieben:Blöd ist nur, dass man nachts kein Licht im Kühlschrank hat, weil dann der Hamster schläft.
Hamster sind aber nachtaktiv, der muss sich dir unter falscher Identität untergemogelt haben

Re: Wann existieren die Objekte nicht mehr?
Verfasst: Donnerstag 2. Dezember 2010, 19:16
von jbs
Tag ist, wenn der Hamster läuft.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Freitag 3. Dezember 2010, 14:55
von Py-Prog
lunar hat geschrieben:@Py-Prog: Nein, in meinem Kühlschrank ist das nicht so. Dessen Licht wird nämlich von einem Hamster in einem Laufrad produziert, und der hat so viel Spaß am Laufen, dass er immer weiter läuft, auch wenn die Tür zu ist. Er ist übrigens top-fit, dieser Hamster. Blöd ist nur, dass man nachts kein Licht im Kühlschrank hat, weil dann der Hamster schläft.
Jetzt musst du blos noch mit Ecosia 'googeln' und dann bist du der umweltfreundlichste Programmieren.
lunar hat geschrieben:
Im Ernst, das Licht im Kühlschrank war eine Analogie, überlege doch mal, was sma damit sagen wollte (Hinweis: Es geht nicht um Kühlschränke, und schon gar nicht darum, ob das Licht jetzt tatsächlich ausgeht oder nicht).
Also wenn ich auf ein Objekt zugreifen kann existiert es für mich, wenn es 'existiert' (im RAM) und ich darauf nicht zugreifen kann existiert es für mich nicht. Das ist meine meinung, aber ob sma das damit sagen wollte ...
cofi hat geschrieben:Hamster sind aber nachtaktiv, der muss sich dir unter falscher Identität untergemogelt haben

Wie ein Hacker jemanden einen Trojaner untermogelt.
Re: Wann existieren die Objekte nicht mehr?
Verfasst: Freitag 3. Dezember 2010, 15:01
von syntor
Wir wissen doch gar nicht, ob das Objekt existiert bis wir nachschauen... verfälschen wir damit nicht das Resultat?

(Schrödinger lässt grüssen) Obwohl, In Python geht das z.B. via Descriptor-protocol.
@ravenheart: Anstelle noch weiteren Unsinn zu schreiben, wäre es doch nützlicher zu wissen, ob denn deine Frage jetzt beantwortet ist.
@snafu: Ja klar, da hast du recht - und ich tendiere auch zu letzterem
