Obwohl diese Frage in der Praxis keinen wirklichen Nutzen hat, bin ich gespannt, wie Python das String-Interning durchführt. Ich habe folgendes bemerkt.
>>> "string" is "string"
True
Das ist wie ich erwartet hatte.
Sie können dies auch tun.
>>> "strin"+"g" is "string"
True
Und das ist ziemlich klug!
Aber das kannst du nicht machen.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Warum sollte Python nicht bewerten s1+"g"und erkennen, dass es dasselbe ist s2und auf dieselbe Adresse verweisen? Was ist eigentlich in diesem letzten Block los, damit es zurückkommt False?
"string1" + "s2",10 + 3*20usw.) bei der Kompilierung, aber Grenzen resultierenden Sequenzen zu nur 20 Elemente (zu verhindern ,[None] * 10**1000von allzu Ihre Bytecode erweitert). Es ist diese Optimierung , die kollabiert"strin" + "g"in"string"; Das Ergebnis ist kürzer als 20 Zeichen.