2010-03-10 20 views
5

Duplicar posible:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python: diferencia entre `is` y` == `?

En Python, ¿cuál es la diferencia entre estas dos afirmaciones:

if x is "odp":

if x == "odp":

+3

dupe http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – SilentGhost

+1

@SilentGhost No estoy de acuerdo. La pregunta vinculada contiene la respuesta a esta pregunta, pero para cualquiera que busque una respuesta relativamente simple a la pregunta que se hace aquí, la pregunta vinculada no parecerá lo mismo. –

+0

@David: y ya se preguntó simple (bastante recientemente), puedes gastar * tu * tiempo para encontrar dónde está, las preguntas que tienen las mismas respuestas están duplicadas en mi libro. – SilentGhost

Respuesta

4

Las pruebas == operador de igualdad

Los is pruebas de palabras clave para la identidad del objeto; si estamos hablando del mismo objeto. Tenga en cuenta que múltiples variables pueden referirse al mismo objeto.

2

El operador is compara la identidad, mientras que el operador == compara el valor. Esencialmente x is y es lo mismo que id(x) == id(y)

0

Ver here

Los operadores es y no es prueba de la identidad del objeto: x es y es verdadero si y sólo si x e y son el mismo objeto. X no es Y produce el valor de verdad inversa

1

Por razones de implementación, "ODP" es un mal ejemplo, pero no se debe utilizar es menos que desee la posibilidad de dos cadenas idénticas para evaluar false:

>>> lorem1 = "lorem ipsum dolor sit amet" 
>>> lorem2 = " ".join(["lorem", "ipsum", "dolor", "sit", "amet"]) 
>>> lorem1 == lorem2 
True 
>>> lorem1 is lorem2 
False 

Como han dicho otros, es pruebas de identidad, no de igualdad. En este caso, tengo dos cadenas separadas con los mismos contenidos. Sin embargo , no debe depender de esto, ya sea:

>>> odp1 = "odp" 
>>> odp2 = "".join(["o", "d", "p"]) 
>>> odp1 == odp2 
True 
>>> odp1 is odp2 
True 

En otras palabras, usted debe Nunca uso es para comparar cadenas.

P.S. En Python 2.7.10 >>> odp1 is odp2 devuelve False.