[Python-de] python speicherverwaltung

Hartmut Goebel h.goebel at goebel-consult.de
Mon Jun 7 12:22:26 CEST 2004


Hi,

Telegramm-Antwort, nur 90% extakt, aber grundsätzlich richtig :-)

Frank Immich wrote:

> Python - Speicherverwaltung : 
> - automatisch  ?

Ja, Garbage Collector. Siehe auch Modul gc und weakref.

> - Speicher wird freigegeben (aus Referenzliste gelöscht) wenn Objekt = 0 ?

Jain. Objekt wird gelöscht, wenn keine Referenz mehr auf das Objekt 
besteht. Die Anzahl der Referenzen werden gezählt. Suche in  Web/c.l.py 
nach 'reference count'.

Nicht verwechseln: Object und Variable.

 >>> a = b = '123'     # a und b zeigen beide auf das gleiche Objekt
 >>> print id(a), id(b)
1077951904 1077951904   # Beweis
 >>> a = None
 >>> print id(a), id(b)   # b zeigt immer noch auf das bisheriege Objekt
1074723624 1077951904
 >>>

>   - bedeutet das für mich, dass ich Variablen (oder file descriptoren)  = 0
> setzen,  Klassen mit   __del__ "löschen" kann ? 

Wenn Du eine Variable auf None/0/you-name-it setzt, wird der 
Referenzzähler des Objektes, auf das die Variable vorher gezeigt hat, um 
eins erniedrigt. Wenn der reference counter 0 ist, wird das Objekt gelöscht.

U.U. besser:
    del myVar
Entfernt auch die Variable, weitere Zugriffe erzeugen dann einen NameError:

 >>> a = '123'
 >>> a
'123'
 >>> del a
 >>> a
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
NameError: name 'a' is not defined
 >>>

__del__ wird aufgerufen, wenn das Objekt gelöscht wird -- aber nur unter 
bestimmten Umständen. Doku lesen.

Klassen != Objekte. Löschen von Klassen:
   del MyFunyClass
Entfernt den Bezeichner 'MyFunyClass' aus dem Scope. Bisherige Objekte 
dieser Klasse existieren aber weiter, der Class-Code wird auch nicht 
freigegeben.

 > Wird dann auch der Speicher freigegeben ?

Wenn das Objekt gelöscht wird: ja.

Hoffe, das hilft Dir erstmal weiter.

-- 
Schönen Gruß - Regards
Hartmut Goebel

| Hartmut Goebel             | IT-Security -- effizient |
| h.goebel at goebel-consult.de | www.goebel-consult.de    |