Acabo de comenzar algunas manipulaciones de cadenas y encontré esta pregunta. Probablemente estaba tratando de hacer algo como el OP, "yo habitual". Las respuestas anteriores no aclararon mi confusión, pero después de pensar un poco al respecto finalmente "lo entendí".
Mientras a, b, c, d, y etienen el mismo valor, los que hacen referencia al mismo lugar. La memoria está guardada. Tan pronto como la variable comienza a tener diferentes valores, comienzan a tener diferentes referencias. Mi experiencia de aprendizaje provino de este código:
import copy
a = 'hello'
b = str(a)
c = a[:]
d = a + ''
e = copy.copy(a)
print map( id, [ a,b,c,d,e ] )
print a, b, c, d, e
e = a + 'something'
a = 'goodbye'
print map( id, [ a,b,c,d,e ] )
print a, b, c, d, e
La salida impresa es:
[4538504992, 4538504992, 4538504992, 4538504992, 4538504992]
hello hello hello hello hello
[6113502048, 4538504992, 4538504992, 4538504992, 5570935808]
goodbye hello hello hello hello something