separar - Comparación de cadenas en Python: es vs.==
reemplazar caracteres en python (4)
Para todos los objetos Python incorporados (como cadenas, listas, dicts, funciones, etc.), si x es y, entonces x == y también es True.
No siempre. NaN es un contraejemplo. Pero usualmente , la identidad ( is
) implica igualdad ( ==
). Lo contrario no es cierto: dos objetos distintos pueden tener el mismo valor.
Además, ¿generalmente se considera mejor simplemente usar ''=='' por defecto, incluso cuando se comparan valores int o booleanos?
Se usa ==
cuando se comparan valores y is
cuando se comparan identidades.
Cuando se comparan ints (o tipos inmutables en general), casi siempre se desean los primeros. Hay una optimización que permite comparar los enteros pequeños con, pero no confíe en ella.
Para los valores booleanos, no debería hacer comparaciones en absoluto. En lugar de:
if x == True:
# do something
escribir:
if x:
# do something
Para comparar con None
, se prefiere == None
sobre == None
.
Siempre me ha gustado usar ''is'' porque me parece más estético y pitón (así es como caí en esta trampa ...), pero me pregunto si está destinado a ser reservado cuando te importa encontrar dos. Objetos con la misma id.
Sí, para eso es exactamente.
Esta pregunta ya tiene una respuesta aquí:
Noté que una secuencia de comandos de Python que estaba escribiendo estaba actuando de forma squirrelly, y la rastreé hasta un bucle infinito, donde la condición del bucle era while line is not ''''
. Al ejecutarlo en el depurador, resultó que esa línea era en realidad ''''
. Cuando lo cambié a !=''''
lugar de is not ''''
, funcionó bien.
Además, ¿generalmente se considera mejor simplemente usar ''=='' por defecto, incluso cuando se comparan valores int o booleanos? Siempre me ha gustado usar ''is'' porque me parece más estético y pitón (así es como caí en esta trampa ...), pero me pregunto si está destinado a ser reservado cuando te importa encontrar dos. Objetos con la misma id.
La lógica no es defectuosa. La declaración
si x es y, entonces x == y también es verdadero
nunca debe ser leído para significar
si x == y entonces x es y
Es un error lógico por parte del lector suponer que lo contrario de una declaración lógica es cierto. Ver http://en.wikipedia.org/wiki/Converse_(logic)
Me gustaría mostrar un pequeño ejemplo de cómo y ==
están involucrados en tipos inmutables. Trata eso:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is
compara dos objetos en la memoria, ==
compara sus valores. Por ejemplo, puede ver que Python almacena en caché los enteros pequeños:
c = 1
b = 1
>>> b is c
True
Debe usar ==
al comparar valores y is
al comparar identidades. (Además, desde un punto de vista en inglés, "es igual a" es diferente de "es".)
Ver esta pregunta
Tu logica en la lectura
Para todos los objetos Python incorporados (como cadenas, listas, dictados, funciones, etc.), si x es y, entonces x == y también es True.
es un poco defectuoso
Si is
aplica, entonces ==
será verdadero, pero NO se aplica a la inversa. ==
puede dar verdadero mientras que is
falso.