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

Veränderbare und unveränderbare Datentypen

Оглавление

Listen und Strings unterscheiden sich jedoch in einem sehr wichtigen Punkt: Eine Liste ist ein veränderbarer Datentyp, da Sie Elemente zu ihr hinzufügen, aus ihr entfernen und ändern können. Dagegen ist ein String unveränderbar – er lässt sich nicht ändern. Wenn Sie versuchen, ein einzelnes Zeichen in einem String neu zuzuweisen, erhalten Sie die Fehlermeldung TypeError, wie das folgende Beispiel zeigt:

>>> name = 'Zophie a cat'

>>> name[7] = 'the'

Traceback (most recent call last):

File "<pyshell#50>", line 1, in <module>

name[7] = 'the'

TypeError: 'str' object does not support item assignment

Um einen String zu »ändern«, müssen Sie ihn zerschneiden und verketten, um einen neuen String aus Teilen des alten zu erstellen. Probieren Sie das wie folgt in der interaktiven Shell aus:

>>> name = 'Zophie a cat'

>>> newName = name[0:7] + 'the' + name[8:12]

>>> name

'Zophie a cat'

>>> newName

'Zophie the cat'

Mit [0:7] und [8:12] haben wir die Zeichen angegeben, die nicht ersetzt werden sollen. Da Strings unveränderbar sind, wird der ursprüngliche String 'Zophie a cat' nicht geändert.

Eine Liste ist zwar veränderbar, dennoch nimmt die zweite Zeile im folgenden Code keine Änderung an der Liste eggs vor:

>>> eggs = [1, 2, 3]

>>> eggs = [4, 5, 6]

>>> eggs

[4, 5, 6]

In Wirklichkeit wird die Liste in eggs hier nicht geändert. Stattdessen wird die alte Liste [1, 2, 3] komplett mit der neuen Liste [4, 5, 6] überschrieben, wie Abbildung 4–2 deutlich zeigt.

Wenn Sie die ursprüngliche Liste in eggs tatsächlich so ändern wollen, dass sie schließlich [4, 5, 6] lautet, so müssen Sie wie folgt vorgehen:

>>> eggs = [1, 2, 3]

>>> del eggs[2]

>>> del eggs[1]

>>> del eggs[0]

>>> eggs.append(4)

>>> eggs.append(5)

>>> eggs.append(6)

>>> eggs

[4, 5, 6]

Abb. 4–2Wenn eggs = [4, 5, 6] ausgeführt wird, dann wird der Inhalt von eggs durch eine neue Liste ersetzt.

In diesem Beispiel steht in eggs am Ende noch die gleiche Liste wie zu Anfang; sie wurde lediglich geändert, aber nicht überschrieben. In Abb. 4–3 können Sie die sieben Schritte sehen, die in den ersten sieben Zeilen dieses Beispiels ablaufen.

Abb. 4–3Die Anweisung del und die Methode append() ändern den Listenwert unmittelbar.

Wenn Sie den Wert eines veränderbaren Datentyps ändern (z. B. wie in dem vorstehenden Beispiel mit der Anweisung del und der Methode append()), werden die Werte unmittelbar ausgetauscht. Der Wert der Variablen wird aber nicht durch einen neuen Listenwert ersetzt.

Die Unterscheidung zwischen veränderbaren und unveränderbaren Typen mag wie sinnlose Haarspalterei wirken, aber im Abschnitt »Verweise übergeben« weiter hinten in diesem Kapitel lernen Sie die unterschiedlichen Verhaltensweisen kennen, die sich je nachdem ergeben, ob Sie eine Funktion mit veränderbaren oder unveränderbaren Argumenten aufrufen. Bevor wir dorthin kommen, sehen wir uns jedoch noch den Datentyp für Tupel an, der eine unveränderbare Form des Listendatentyps darstellt.

Routineaufgaben mit Python automatisieren

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