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 s2
und auf dieselbe Adresse verweisen? Was ist eigentlich in diesem letzten Block los, damit es zurückkommt False
?
"string1" + "s2"
,10 + 3*20
usw.) bei der Kompilierung, aber Grenzen resultierenden Sequenzen zu nur 20 Elemente (zu verhindern ,[None] * 10**1000
von allzu Ihre Bytecode erweitert). Es ist diese Optimierung , die kollabiert"strin" + "g"
in"string"
; Das Ergebnis ist kürzer als 20 Zeichen.