Hallo zusammen,
bitte entschuldigt die blöde Frage, aber was bedeutet "Strings sind nicht veränderbar" genau?
Gerne auch Codebeispiele
Grüße
mkeil
Blöde Frage zu "Strings sind nicht veränderbar"
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
- 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.
Strings sind nicht veränderbar (immutable) weil du jedes mal, wenn du einen String zu verändern versuchst, in Wirklichkeit einen neuen String erschaffst.
Das ist nicht selbstverständlich. Manche Sprache implementieren Strings als veränderbare Listen von einzelnen Zeichen. Daher wird das bei Python explizit erwähnt.
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
Code: Alles auswählen
>>> s = 'Hallo'
>>> id(s)
3078207616L
>>> s += ' Welt.'
>>> id(s)
3078203936L
Bottle: Micro Web Framework + Development Blog
@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.
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.
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.