[Python-de] python speicherverwaltung

Hartmut Goebel h.goebel at goebel-consult.de
Son Jun 13 12:13:31 CEST 2004


Christian Tismer schrieb:

>> Klassen != Objekte. Löschen von Klassen:
> 
> Wie meinst Du das?
> Klassen sind auf alle Fälle Objekte.

Ich schreib doch: 90% richtig :-)

>>   del MyFunyClass
>> Entfernt den Bezeichner 'MyFunyClass' aus dem Scope. Bisherige Objekte 
>> dieser Klasse existieren aber weiter, der Class-Code wird auch nicht 
>> freigegeben.
> 
> Richtig. Bis alle Referenzen weg sind (z.B. Instanzen)

Auch wenn alle Instanzen weg sind, wird der Class-Code noch nicht 
unbedingt freigegeben. Beispiel:

 >>> def func():
...     class A:
...             pass
...     del A
...
 >>> func.func_code.co_consts
(None, 'A', <code object A at 0x403fa7e0, file "<stdin>", line 2>)
 >>> func()
 >>> func.func_code.co_consts
(None, 'A', <code object A at 0x403fa7e0, file "<stdin>", line 2>)
 >>>

Obwohl nach Aufruf der Funktion 'func' keine Referenz mehr auf die 
Klasse 'func.A' besteht (auch keine Instanz), ist der Class-Code noch 
da. Solange, bis der func_code von 'func' freigegeben wird; und der wird 
erst freigegeben, wenn das Modul, in den 'func' definiert wurde, 
freigegeben wurde.

Soweit die akademische Übung für heute :-)

-- 
Schönen Gruß - Regards
Hartmut Goebel

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