Chociaż to pytanie nie ma żadnego rzeczywistego zastosowania w praktyce, jestem ciekawy, jak Python dokonuje internowania ciągów. Zauważyłem, co następuje.
>>> "string" is "string"
True
To jest tak, jak się spodziewałem.
Ty też możesz to zrobić.
>>> "strin"+"g" is "string"
True
I to całkiem sprytne!
Ale nie możesz tego zrobić.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Dlaczego Python miałby nie ocenić s1+"g"i zdać sobie sprawę, że to to samo, co s2i skierować go pod ten sam adres? Co właściwie dzieje się w tym ostatnim bloku, że wraca False?
"string1" + "s2",10 + 3*20etc.) w czasie kompilacji, ale ograniczenia wynikające sekwencje do zaledwie 20 elementów (w celu zapobieżenia[None] * 10**1000z nadmiernie rozszerza swoją kodu bajtowego). To właśnie ta optymalizacja zapadła"strin" + "g"się"string"; wynik jest krótszy niż 20 znaków.