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.

questionAnswers(3)

yourAnswerToTheQuestion