Pourquoi la comparaison de chaînes en utilisant soit "= = " ou " est " parfois produire un résultat différent?

J'ai un programme en Python où les deux variables sont définies à la valeur 'public'. Dans une expression conditionnelle, j'ai la comparaison var1 is var2 qui échoue, mais si je le change pour var1 == var2 il retourne True.

Maintenant, si j'ouvre mon interpréteur Python et faire la même chose "est" de la comparaison, il réussit.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True

Ce qui me manque ici?

  • Je ne sais rien à propos de Python, mais est-il possible que l'un est la comparaison des valeurs tandis que l'autre est comparer des objets?
  • voir: stackoverflow.com/questions/1392433/...
  • Ce problème se produit également lorsque vous lisez une console d'entrée, par exemple: input = raw_input("Decide (y/n): "). Dans ce cas, une entrée de "y" et if input == 'y':retourne "True", alors que if input is 'y': retournera False.
  • Ce blog fournit une mesure plus complète de l'explication que n'importe quelle réponse guilload.com/python-string-interning
  • Comme @chris-rico mentionne, j'ai une grande explication ici stackoverflow.com/q/15541404/1695680
  • pouvez-vous expliquer plus précisément pourquoi dans l'affiche originale exemple, le "est" de l'opérateur échouer sur le script, mais le même opérateur sur les mêmes chaînes de retourner "true" sur le mode interactif? C'est le même interprète, alors nous devrions attendre le même comportement sur un stage que vous avez l'exécution d'un script ou d'exécuter en mode interactif, à droite?
  • Double Possible de Est-il une différence entre `==` et `est` en Python?

InformationsquelleAutor jottos | 2009-10-01