Unter welchen Umständen haben gleiche Zeichenfolgen dieselbe Referenz?

Ich habe im Web nach Fragen zum Stapelüberlauf gesucht, konnte jedoch keine Antwort auf diese Frage finden. Die Beobachtung, die ich gemacht habe, ist, dass in Python 2.7.3, wenn Sie zwei Variablen die gleiche einzelne Zeichenkette zuweisen, z.

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

Dann haben die Variablen die gleiche Referenz:

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

Dies gilt auch für einige längere Zeichenfolgen:

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

Es gibt jedoch viele Fälle, in denen die Referenz (unerwartet) nicht geteilt wird:

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

Kann jemand bitte den Grund dafür erklären?

Ich vermute, dass es Vereinfachungen / Ersetzungen durch den Interpreter und / oder einen Caching-Mechanismus geben könnte, der die Tatsache ausnutzt, dass Python-Strings in einigen speziellen Fällen nicht optimiert werden können. Aber was weiß ich? Ich habe versucht, mit dem str-Konstruktor und der copy.deepcopy-Funktion tiefe Kopien von Zeichenfolgen zu erstellen, aber die Zeichenfolgen haben immer noch inkonsistente Verweise.

Der Grund, warum ich Probleme damit habe, ist, dass ich in einigen Komponententests, die ich für Klonmethoden von Pythonklassen neuen Stils schreibe, auf ungleiche Verweise auf Zeichenfolgen prüfe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage