¿En qué circunstancias las mismas cadenas comparten la misma referencia?

He buscado en la web y las preguntas de desbordamiento de pila, pero no he podido encontrar una respuesta a esta pregunta. La observación que he hecho es que en Python 2.7.3, si asignas a dos variables la misma cadena de un solo carácter, por ejemplo.

>>> a = 'a'
>>> b = 'a'
>>> c = ' '
>>> d = ' '

Entonces las variables compartirán la misma referencia:

>>> a is b
True
>>> c is d
True

Esto también es cierto para algunas cadenas más largas:

>>> a = 'abc'
>>> b = 'abc'
>>> a is b
True
>>> '  ' is '  '
True
>>> ' ' * 1 is ' ' * 1
True

Sin embargo, hay muchos casos en los que la referencia (sin esperar) no se comparte:

>>> a = 'a c'
>>> b = 'a c'
>>> a is b
False
>>> c = '  '
>>> d = '  '
>>> c is d
False
>>> ' ' * 2 is ' ' * 2
False

¿Alguien puede explicar la razón de esto?

Sospecho que podría haber simplificaciones / sustituciones hechas por el intérprete y / o algún mecanismo de almacenamiento en caché que haga uso del hecho de que las cadenas de python son inmutables para optimizar en algunos casos especiales, pero ¿qué debo saber? Intenté hacer copias en profundidad de cadenas utilizando el constructor str y la función copy.deepcopy, pero las cadenas aún comparten inconsistentemente las referencias.

La razón por la que tengo problemas con esto es porque compruebo la desigualdad de las referencias a las cadenas en algunas pruebas unitarias que estoy escribiendo para los métodos de clonación de las clases de python de nuevo estilo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta