Si bien esta pregunta no tiene ningún uso real en la práctica, tengo curiosidad por saber cómo Python realiza prácticas de cadenas. He notado lo siguiente.
>>> "string" is "string"
True
Esto es lo que esperaba.
También puedes hacer esto.
>>> "strin"+"g" is "string"
True
¡Y eso es bastante inteligente!
Pero no puedes hacer esto.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
¿Por qué Python no evaluaría s1+"g"
y se daría cuenta de que es lo mismo que s2
apuntar a la misma dirección? ¿Qué está pasando realmente en ese último bloque para que vuelva False
?
"string1" + "s2"
,10 + 3*20
, etc.) en tiempo de compilación, pero los límites resultantes secuencias a sólo 20 elementos (para evitar que[None] * 10**1000
se expanda excesivamente su código de bytes). Es esta optimización la que colapsó"strin" + "g"
en"string"
; el resultado tiene menos de 20 caracteres.