Sebbene questa domanda non abbia alcun reale utilizzo nella pratica, sono curioso di sapere come Python esegue l'internamento delle stringhe. Ho notato quanto segue.
>>> "string" is "string"
True
Questo è come mi aspettavo.
Puoi anche farlo.
>>> "strin"+"g" is "string"
True
E questo è abbastanza intelligente!
Ma non puoi farlo.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Perché Python non valuta s1+"g"
e si rende conto che è la stessa cosa s2
e lo punta allo stesso indirizzo? Cosa sta effettivamente succedendo in quell'ultimo blocco per riaverlo False
?
"string1" + "s2"
,10 + 3*20
, ecc) in fase di compilazione, ma limiti derivanti sequenze a soli 20 elementi (per evitare che[None] * 10**1000
dal eccessivamente espandere la vostra bytecode). È questa ottimizzazione che è crollata"strin" + "g"
in"string"
; il risultato è inferiore a 20 caratteri.