Em que circunstâncias as strings iguais compartilham a mesma referência?
Pesquisei na Web e fiz perguntas sobre estouro de pilha, mas não consegui encontrar uma resposta para essa pergunta. A observação que eu fiz é que no Python 2.7.3, se você atribuir duas variáveis a mesma cadeia de caracteres única, por exemplo,
>>> a = 'a'
>>> b = 'a'
>>> c = ' '
>>> d = ' '
Então as variáveis compartilharão a mesma referência:
>>> a is b
True
>>> c is d
True
Isso também é verdade para algumas seqüências mais longas:
>>> a = 'abc'
>>> b = 'abc'
>>> a is b
True
>>> ' ' is ' '
True
>>> ' ' * 1 is ' ' * 1
True
No entanto, há muitos casos em que a referência é (inesperadamente) não compartilhada:
>>> a = 'a c'
>>> b = 'a c'
>>> a is b
False
>>> c = ' '
>>> d = ' '
>>> c is d
False
>>> ' ' * 2 is ' ' * 2
False
Alguém por favor pode explicar a razão disso?
Eu suspeito que pode haver simplificações / substituições feitas pelo intérprete e / ou algum mecanismo de cache que faz uso do fato de que as seqüências de caracteres python são imutáveis para otimizar em alguns casos especiais, mas o que eu sei? Eu tentei fazer cópias profundas de seqüências de caracteres usando o construtor str e a função copy.deepcopy, mas as seqüências de caracteres ainda compartilham inconsistentemente referências.
A razão pela qual estou tendo problemas com isso é porque eu verifico a desigualdade de referências a cadeias de caracteres em alguns testes de unidade que estou escrevendo para métodos clones de classes python de estilo novo.