Es ist völlig egal, von welcher Art das Objekt ist, dem Sie einen Namen zuweise. Aufrufe geschehen grundsätzlich nur über Namen. Wenn Sie schon Erfahrungen mit anderen Programmiersprachen, wie z.B. C , C++, Java oderPascal haben, werden Sie scih fragen, warum man sich keine Gedanken über die Grösse des einzurichtenden Objektes machen muss, weshalb also keine Typendeklaration erforderlich ist.
Nun, Sie haben vielleicht aber auch schon festgestellt, dass das was wir hier als Namen bezeichnen, die Pointer in diesen Sprachen entsprchen1.6. Ein Pointer ist durch eine weiche Bindung (soft link) an das Objekt gebunden, auf das er zeigt. Bei Python gibt es nur die weichen Bindungen! In den genannten Programmiersprachen gibt es aber zusätzlich noch die harte Bindung (hard link). Wenn Sie beispielsweise in C anna=4 eingeben, so zeigt der Name anna nicht auf das Objekt 4 , sondern ist identisch mit der Adresse des Objektes 4 .
Wie bitte? Noch einmal: bei einem weichen Link ist der Name ein Container,
der die Adresse des angebundenen Objektes enthält. Bei einem
harten Link stellt dieser Name die Adresse selbst dar. Ist der Name
anna wie bei Pascal durch anna=4 hart mit dem Speicherplatz
verbunden, so würde eine folgende Zuweisung anna=5 keinen neuen
Speicherplatz einrichten, sondern lediglich den Inhalt des
Speicherplatzes anna verändern. Wenn Sie in diesen Sprachen
versuchen, eine Zuweisung anna='Hello world' abzulassen, so
hätte dies einen Fehler zur Folge, wenn anna vorher nur Zahlen
gespeichert hat. Ein Text erfordert sehr viel mehr Arbeitsspeicher1.7 als eine Zahl. Also muss bei einem harten Link vorher gesagt
werden, wie gross der Speicherplatz sein muss, d.h. eine Typendeklaration
s einzurichtenden Namens ist erforderlich. Diese Sachverhalte sind
in der Abbildung
dargestellt. Der Name
bernd ist also direkt mit dem Objekt verbunden.
Bei einem weichen Link wie bei Python wird erst das Objekt erstellt und dann lediglich die Adresse an den Namen übergeben, der auf dieses Objekt zeigen soll. Die Grösse des Speicherplatzes kann dem Namen egal sein, da dies durch den Python-Interpreter selbst erledigt wird.
Wird der Name eines hart gelinktes Objekt gelöscht, so ist das Objekt selbst weg. Bei einem weichen Link wird dagegen nur die Verbindung zu dem Objekt aufgehoben. Es existiert dann im Arbeitsspeicher als Speicherleiche, die dann durch den automatischen garbage collector (wie auch in Java) automatisch entfernt wird.
Wir merken uns also: bei Python ist eine Typendeklaration nicht erforderlich! Es gibt nur Namen.