Meskipun pertanyaan ini tidak memiliki kegunaan nyata dalam praktiknya, saya ingin tahu bagaimana Python melakukan interning string. Saya telah memperhatikan yang berikut ini.
>>> "string" is "string"
True
Ini seperti yang saya harapkan.
Anda juga bisa melakukan ini.
>>> "strin"+"g" is "string"
True
Dan itu sangat pintar!
Tapi Anda tidak bisa melakukan ini.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Mengapa Python tidak mengevaluasi s1+"g"
, dan menyadari bahwa itu sama s2
dan mengarahkannya ke alamat yang sama? Apa yang sebenarnya terjadi di blok terakhir untuk mendapatkannya kembali False
?
"string1" + "s2"
,10 + 3*20
, dll) pada waktu kompilasi, tetapi batas dihasilkan urutan hanya 20 elemen (untuk mencegah[None] * 10**1000
dari terlalu memperluas bytecode Anda). Pengoptimalan inilah yang runtuh"strin" + "g"
menjadi"string"
; hasilnya lebih pendek dari 20 karakter.