Embora essa pergunta não tenha nenhum uso real na prática, estou curioso para saber como o Python faz o estágio de string. Eu percebi o seguinte.
>>> "string" is "string"
True
Isso é o que eu esperava.
Você também pode fazer isso.
>>> "strin"+"g" is "string"
True
E isso é muito inteligente!
Mas você não pode fazer isso.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Por que o Python não avaliaria s1+"g"
e perceberia que é o mesmo s2
e apontaria para o mesmo endereço? O que realmente está acontecendo naquele último bloco para que ele volte False
?
"string1" + "s2"
,10 + 3*20
, etc.) em tempo de compilação, mas limites decorrentes seqüências para apenas 20 elementos (para evitar[None] * 10**1000
a partir excessivamente expandir o seu bytecode). É essa otimização que entrou"strin" + "g"
em colapso"string"
; o resultado é menor que 20 caracteres.