2017-06-27 1 views
1

In Python String sind unveränderlich warum dann die folgende Operation in Python erlaubt?In Python String sind dann unveränderlich, warum die Überschreiboperation in Python erlaubt?

a = 'Hello' 
a = 'Hi' 
+0

Weil 'a' nicht die Zeichenfolge ist. Es ist ein Name, der auf die Zeichenfolge verweist. Es kann [re]/[un] gebunden sein. –

+0

'a' sieht seine Referenz geändert in dem Prozess. –

+3

Die Zeichenfolge ist unveränderlich. Der gebundene Name 'a' ist nicht. – deceze

Antwort

3

Da a eine Referenz/Griff (ähnlich einem Zeiger, wenn Sie bevorzugen) ist auf den String, nicht gerade einen String. Sie können sogar die Speicheradresse überprüfen, um sicherzustellen, dass.

>>> a = "hello" 
>>> id(a) 
140102378280544 # memory address (not exactly but that's irrelevant to the topic) 
>>> a = 'hii' 
140102388086864 # different memory address than before 

Strings in Python sind unveränderlich, weil es nur an einem Ort (meistens) gespeichert sind, also nicht mutiert werden kann.

>>> a = 'country' 
>>> b = 'country' 
>>> id(a) == id(b) 
True 
>>> a is b 
True 
+0

Ich weiß das auch. Mein Zweifel ist, wenn String in Python unveränderlich ist bedeutet, warum überschriebene Operation erlaubt ist? Was passiert in der Speicherebene? Welcher Speicher ist für diese Operation verantwortlich? – veneth

+0

@veneth Überprüfen Sie zuerst meine aktualisierte Antwort. Wenn Sie nun 'a' einen neuen Wert zuweisen, wird der neue Wert 'hii' nicht in der gleichen Speicheradresse wie 'Hallo' gespeichert. Variablen in Python sind genau wie Zeiger, die bereits Dereferenzierungen sind. Also, in Laien ausgedrückt, wenn Sie den Wert "hii" zu "a" zuweisen, speichern Sie "hii" an einer Speicheradresse und weisen den Wert dieser Speicheradresse zu "a" zu. – hspandher

1
>>> a = 'Hello' 
>>> id(a) 
4519028800 
>>> a = 'Hi' 
>>> id(a) 
4519896088 

nicht die gleiche Variable ... obwohl ich die Werte von id nur bestenfalls indikativ sagen muss.

Wenn Sie versuchen, ein Literal a neu zuzuweisen, ändern Sie die Zeichenfolge nicht. Die Zeichenfolge bleibt gleich. Was sich ändert, ist die Referenz, die a verweist.

+1

Warum sagen Sie, dass die ID-Werte nur indikativ sind? –

+0

Da in einer Interpreter-Sitzung die gleichen Werte über Variablen wiederverwendet werden können. –