Bien que cette question n'ait aucune utilité réelle dans la pratique, je suis curieux de savoir comment Python effectue l'internement de chaînes. J'ai remarqué ce qui suit.
>>> "string" is "string"
True
C'est comme je m'y attendais.
Vous pouvez également le faire.
>>> "strin"+"g" is "string"
True
Et c'est assez intelligent!
Mais tu ne peux pas faire ça.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Pourquoi Python n'évaluerait-il pas, ne se rendrait-il pas s1+"g"
compte que c'est la même chose s2
et ne le ferait-il pas pointer vers la même adresse? Que se passe-t-il réellement dans ce dernier bloc pour qu'il revienne False
?
"string1" + "s2"
,10 + 3*20
, etc.) au moment de la compilation, mais les limites résultant des séquences à seulement 20 éléments (pour éviter[None] * 10**1000
de se dilater excessivement votre bytecode). C'est cette optimisation qui s'est effondrée"strin" + "g"
en"string"
; le résultat est inférieur à 20 caractères.