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 s2dan 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**1000dari terlalu memperluas bytecode Anda). Pengoptimalan inilah yang runtuh"strin" + "g"menjadi"string"; hasilnya lebih pendek dari 20 karakter.