2012-02-08 11 views

risposta

202

Questo perché le stringhe sono immutabili in Python.

Ciò significa che X.replace("hello","goodbye") restituisce una copia di X con sostituzioni effettuate. A causa di ciò è necessario sostituire questa linea:

X.replace("hello", "goodbye") 

con questa linea:

X = X.replace("hello", "goodbye") 

Più in generale, questo è vero per tutti i metodi delle stringhe Python che modificano il contenuto di una stringa "in-place" , per esempio replace, strip, translate, lower/upper, join, ...

È necessario assegnare loro produzione a qualcosa se si desidera utilizzarlo e non gettarlo via, per esempio

X = X.strip(' \t') 
X2 = X.translate(...) 
Y = X.lower() 
Z = X.upper() 
A = X.join(':') 

e così via.

+7

E '[stato proposto che la questione venga usato come un bersaglio duplicato per questo problema generale] (http://meta.stackoverflow.com/a/287175/603977). La domanda è chiara e concisa, così come la tua risposta, che li rende una coppia eccellente. Detto questo, come ti sentiresti ad ampliare leggermente la tua risposta per citare qualcosa sulla falsariga di "... e questo è vero per tutti i metodi che potrebbero cambiare il contenuto di una stringa"? –

+1

@JoshCaswell: finalmente sono andato avanti e ho apportato le modifiche alla risposta di Tadeck. Meglio (e più veloce) chiedere perdono che permesso ... soprattutto perché abbiamo reso questa la risposta canonica al diluvio regolare di queste domande. – smci

0

Tutte le funzioni di stringa come lower, upper, strip restituiscono una stringa senza modificare l'originale. Se provi a modificare una stringa, come potresti pensare well it is an iterable, fallirà.

x = 'hello' 
x[0] = 'i' #'str' object does not support item assignment 

C'è una buona lettura circa l'importanza di stringhe essere immutabili: Why are Python strings immutable? Best practices for using them

Problemi correlati