Blöde Frage zu "Strings sind nicht veränderbar"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mkeil
User
Beiträge: 11
Registriert: Samstag 26. Februar 2011, 21:04

Hallo zusammen,

bitte entschuldigt die blöde Frage, aber was bedeutet "Strings sind nicht veränderbar" genau?
Gerne auch Codebeispiele :)

Grüße
mkeil
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Naja, Strings, also Zeichenketten, sind halt nicht veränderbar:

Code: Alles auswählen

>>> a = "Hallo"
>>> a[2]
'l'
>>> a[2] = 'v'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Mal zwei Beispiele:

Listen sind veränderbar (mutable) weil du deren Inhalt manipulieren kannst, ohne die Liste selbst aus zu tauschen.

Code: Alles auswählen

>>> l = [1,2,3,4]
>>> id(l)
3078207404L
>>> l.append(5)
>>> id(l)
3078207404L
Strings sind nicht veränderbar (immutable) weil du jedes mal, wenn du einen String zu verändern versuchst, in Wirklichkeit einen neuen String erschaffst.

Code: Alles auswählen

>>> s = 'Hallo'
>>> id(s)
3078207616L
>>> s += ' Welt.'
>>> id(s)
3078203936L
Das ist nicht selbstverständlich. Manche Sprache implementieren Strings als veränderbare Listen von einzelnen Zeichen. Daher wird das bei Python explizit erwähnt.
Bottle: Micro Web Framework + Development Blog
mkeil
User
Beiträge: 11
Registriert: Samstag 26. Februar 2011, 21:04

Danke! Nur, wieso wird das so gemacht?

Grüße
mkeil
BlackJack

@mkeil: Weil man mit veränderbaren Zeichenketten nicht alles machen kann, und man dann zwei verschiedene Zeichenkettentypen bräuchte. Veränderliche Zeichenketten kann man zum Beispiel nicht (sicher) als Schlüssel in Dictionaries verwenden. Zumindest CPython baut in der Implementierung sehr stark darauf aus. Die Mehrzahl der Namen und Attribute sind über Zeichenketten implementiert, die in Dictionaries stecken, die den Namensraum modellieren.
syntor
User
Beiträge: 88
Registriert: Donnerstag 2. Dezember 2010, 03:56

Es hat auch einen ganz praktischen Effekt: jegliche ungewollten Nebenwirkungen, herbeigeführt durch die Änderung eines Strings, werden so vermieden.
Zusätzlich hast du eine wichtige Information über einen String: Gibst du diesen String einer Funktion als Argument mit, so weisst du mit Sicherheit, dass er auch nach dem Aufruf der Funktion noch den selben Wert haben wird.
Antworten