Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 135

Identität und die Funktion id()

Оглавление

Vielleicht fragen Sie sich, warum das merkwürdige Verhalten, das Sie im vorhergehenden Abschnitt kennengelernt haben, nicht auch bei unveränderbaren Werten wie Integern oder Strings vorkommt. Um das besser zu verstehen, können wir die Python-Funktion id() heranziehen. Alle Werte in Python haben eine eindeutige Identität, die Sie mit dieser Funktion abrufen können. Geben Sie folgenden Code in die interaktive Shell ein:

>>> id('Howdy') # Auf Ihrem Computer wird eine andere Zahl zurückgegeben

44491136

Wenn Python id('Howdy') ausführt, wird der String 'Howdy' im Arbeitsspeicher angelegt und die numerische Adresse seines Speicherorts zurückgegeben. Python wählt die Adresse danach aus, welche Bytes auf dem Computer gerade frei sind. Daher erhalten Sie jedes Mal, wenn Sie diesen Code ausführen, ein anderes Ergebnis.

Wie alle Strings ist auch 'Howdy' unveränderbar. Wenn Sie einen String in einer Variablen ändern, wird in Wirklichkeit ein neues Stringobjekt an einer anderen Stelle im Arbeitsspeicher angelegt und der Verweis darauf in der Variablen festgehalten. Mit dem folgenden Beispielcode können Sie beobachten, wie sich die Identität des Strings ändert, auf den bacon verweist:

>>> bacon = 'Hello'

>>> id(bacon)

44491136

>>> bacon += ' world!' # Erstellt neuen String aus 'Hello' und ' world!'

>>> id(bacon) # bacon verweist jetzt auf einen ganz anderen String

44609712

Listen dagegen sind veränderbar. Die Methode append() erstellt kein neues Listenobjekt, sondern verändert das vorhandene. Wir sprechen hier von einer unmittelbaren oder direkten Änderung des Objekts.

>>> eggs = ['cat', 'dog'] # Erstellt eine neue Liste

>>> id(eggs)

35152584

>>> eggs.append('moose') # append() ändert die Liste direkt

>>> id(eggs) # eggs verweist immer noch auf dieselbe Liste

35152584

>>> eggs = ['bat', 'rat', 'cow'] # Erstellt eine neue Liste mit neuer

Identität

>>> id(eggs) # eggs verweist jetzt auf eine ganz andere Liste

44409800

Wenn zwei Variablen auf dieselbe Liste verweisen (wie spam und eggs im vorherigen Abschnitt) und die Liste geändert wird, dann sind davon beide Variablen betroffen. Die Listenmethoden append(), extend(), remove(), sort(), reverse() usw. ändern Listen direkt.

Pythons automatische Garbage Collection entfernt alle Werte, auf die keine Variablen mehr verweisen, um Platz im Arbeitsspeicher freizumachen. Über diese Garbage Collection müssen Sie sich keine Gedanken machen, was eine gute Sache ist, denn durch die manuelle Speicherverwaltung in anderen Programmiersprachen schleichen sich häufig Fehler ein.

Routineaufgaben mit Python automatisieren

Подняться наверх