Empfohlene Unterrichtsinhalte als Vorbereitung für dieses Thema: 02-03, 04-01, 08-01 (Listen, Dictionaries, Sets)

Einführung in die computerlinguistische Programmierung mit Python

08-02: Mutability

Veränderbarkeit von Variablenwerten

Wir haben nun schon viele Datentypen kennengelernt und mit ihnen gearbeitet. Dabei ist uns immer wieder ein Begriff begegnet: Mutability. Der Begriff bezeichnet die Eigenschaft bestimmter Datentypen, dass Variablenwerte dieser Typen nach der Initialisierung “in-place” verändert werden können. In Python sind die Datentypen list (Listen), dict (Dictionaries), und set (Mengen).

Obwohl wir im Code-Schnipsel oben jeweils die erste Variable der veränderbaren Datentypen nach der Initialisierung verändern, spiegelt die zweite Variable diese Veränderung wieder. Wir dürfen hierbei nicht vergessen, dass der Vergleichsoperator == nur die Werte von zwei Variablen vergleicht.

Diese Bobachtung basiert darauf, dass wir bei Variablenzuweisungen der Form variable1 = variable2 für die Variable variable2 (nur) einen Verweis auf den Speicherort von variable1 vornehmen. Die beiden Variablennamen verweisen damit auf den gleichen Speicherort, d.h. ist mit Hilfe beider Variablennamen möglich auf ein und den selben Wert zuzugreifen oder diesen zu verändern.

Bei nicht-verändernbaren Datentypen ist der Verweis auf einen Speicherort mittels zwei oder mehr Variablennamen ebenfalls möglich. Jedoch wird bei der Änderung des Werts einer nicht-veränderbaren Variable für diesen neuen Wert auch ein neuer Speicherort benutzt. Deshalb verweisen word1 und number1 nach der Zuweisung eines neuen Werts auf einen anderen Speicherort als word2 und number2 und es werden zwei verschiedene Werte ausgegeben.

Die Funktionen id() und der Operator is

Mit Hilfe der Funktion id() lässt sich für jede Variable deren Identität ermitteln. Die Identität ist eine Ganzzahl die jeden Variablenwert während des Programmablaufs eineindeutig bezeichnet. Über die Identität einer Variable lässt sich auf den Speicherort des zugehörigen Variablenwerts schließen. (In der Python-Implementierung die mit Hilfe der Programmiersprache C vorgenommen wurde, entspricht die Indentität direkt dem Speicherort der Variable.)

Da liste1 und liste2 auf den gleichen Speicherort verweisen, ist deren Identität gleich. Dies ist vor und nach der Wertänderung der Fall.

Um die Identität von zwei Variablen noch einfacher vergleichen zu können können wir den Operator is benutzen. Er ermittelt die Identitäten der Variablen rechts und links und falls diese gleich sind, wird True zurückgegeben, andernfalls False.

Unter bestimmten Bedingungen können zwei unveränderbare Variablen die gleiche Identität haben:

Immutables des gleichen Typs und des gleichen Werts können aus Gründen der Optimierung auf den selben Speicherort verweisen, falls sie eine bestimmte Länge nicht überschreiten.

Unabhängige Mutables werden immer separat angelegt, auch wenn sie identische Werte haben. Zwei unabhängige Mutables haben deshalb immer auch verschiedene Identitäten.

Zusammenfassung

Weitere Themen dieser Woche