この質問は実際には実際には使用されませんが、Pythonが文字列インターンをどのように行うかについて興味があります。私は次のことに気づきました。
>>> "string" is "string"
True
思った通りです。
これを行うこともできます。
>>> "strin"+"g" is "string"
True
そして、それはかなり賢いです!
しかし、これを行うことはできません。
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
なぜPythonは評価せずs1+"g"
、それが同じであることに気づきs2
、同じアドレスを指すのでしょうか?その最後のブロックで実際に何が起こっているのFalse
でしょうか?
"string1" + "s2"
、10 + 3*20
コンパイル時など、)が、得られる限界のシーケンスだけで20の要素(防ぐためにを[None] * 10**1000
過度にあなたのバイトコードを拡大してから)。に崩壊"strin" + "g"
したのはこの最適化"string"
です。結果は20文字より短くなります。