SilentGhost et d'autres sont correct ici. is
est utilisé pour l'identité par rapport à l' ==
est utilisé pour l'égalité de comparaison.
La raison pour laquelle cela fonctionne de manière interactive, c'est que la plupart des littéraux de chaîne sont internés par défaut. De Wikipedia:
Interné chaînes accélérer chaîne
les comparaisons, qui sont parfois un
goulot d'étranglement des performances dans les applications
(tels que les compilateurs et dynamique
langage de programmation de logiciels d'exécution)
s'appuient fortement sur les tables de hachage avec
clés de chaîne. Sans stage,
vérifier que les deux chaînes
sont égaux implique d'examiner chaque
caractères des deux chaînes. C'est
lent pour plusieurs raisons: c'est
intrinsèquement O(n) dans la longueur de la
les chaînes; il nécessite généralement de lit
en provenance de plusieurs régions de la mémoire, qui
prendre du temps; et le lit, elle remplit les
cache du processeur, ce qui signifie qu'il est moins
cache disponibles pour d'autres besoins. Avec
interné cordes, un simple objet
test d'identité suffit, après l'
original stagiaire de l'opération; c'est
généralement mis en œuvre comme un pointeur
test d'égalité, normalement juste un seul
instruction machine sans mémoire
référence à tous.
Alors, quand vous avez deux littéraux de chaîne (les mots qui sont littéralement tapé dans votre code source du logiciel, entouré par des guillemets) dans votre programme qui ont la même valeur, le Python, le compilateur va automatiquement stagiaire les chaînes, les rendant à la fois stocké dans le même emplacement mémoire. (Notez que ce n'est pas toujours le cas, et le règles lorsque cela se produit sont assez compliquées, donc merci de ne pas compter sur ce problème dans le code de production!)
Car, dans votre session interactive les deux chaînes sont en fait stockées dans le même emplacement de mémoire, ils ont la même identité, de sorte que l' is
opérateur fonctionne comme prévu. Mais si vous construisez une chaîne de caractères par une autre méthode (même si cette chaîne contient exactement les mêmes caractères), puis la chaîne peut être égal, mais ce n'est pas la même chaîne , -- c'est qu'il a une autre identité, car il est stocké dans un endroit différent dans la mémoire.