Diferencia entre '__eq__' VS 'is' VS '==' en Python
Los operadores __eq__, 'is' y == en Python se utilizan para comparar la igualdad de objetos en Python. El método __eq__ comprueba la igualdad de objetos de la misma clase o si queremos hacer una función de comparación personalizada. El operador 'is' verifica la ubicación de memoria de los dos objetos, mientras que el operador == verifica solo el valor de los dos objetos que se comparan. En este artículo, discutiremos la diferencia entre los tres operadores y sus usos.
Method |
Functionality |
Syntax |
---|---|---|
__eq__ |
Checks for equality of objects values between two objects of the same class |
def __eq__(self,other) |
is |
Checks if two objects have the same memory location |
a is b |
== |
Checks for the value of the two objects |
a==b |
El método __eq__()
El método __eq__ en Python se utiliza para definir cómo se compara la igualdad de los objetos de una clase. El método __eq__ toma dos argumentos: self(objeto en el lado izquierdo de == operador) y otro (objeto en el lado derecho de == operador). El método __eq__ siempre devuelve un valor booleano (Verdadero o Falso). Si devuelve algo más que el valor booleano, generará TypeError.
Ejemplo
En el siguiente ejemplo, creamos una clase llamada Persona que tiene dos atributos: nombre y edad. Luego definimos el método __eq__() en la clase para comparar los atributos nombre y edad del objeto persona. Finalmente, se crean dos instancias de la clase persona, es decir, p1 y p2 y se comparan utilizando el operador ==.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
if isinstance(other, Person):
return self.name == other.name and self.age == other.age
return False
p1 = Person("John", 30)
p2 = Person("John", 30)
if p1 == p2:
print("p1 and p2 are equal")
Producción
p1 and p2 are equal
El operador 'es'
El operador `is` comprueba la ubicación de memoria de los dos objetos. Si ambos objetos apuntan a la misma ubicación de memoria, entonces el operador "is" devuelve verdadero; de lo contrario, devuelve falso. El operador `is` no está acostumbrado a comprobar la igualdad del valor del operador.
Ejemplo
En el siguiente ejemplo, creamos una matriz y la asignamos a otra variable. Con la ayuda del operador is, podemos comprobar si tanto la variable a como la b se refieren a la misma ubicación de memoria o no.
a = [1, 2, 3]
b = a
print(a is b)
Producción
True
El operador `==`
El operador `==` comprueba la igualdad de valores de los operandos u objetos que se comparan. Devuelve verdadero si los operadores tienen el mismo valor y falso en caso contrario. El operador `==` no verifica la ubicación de memoria de los dos objetos.
Ejemplo
En el siguiente ejemplo, se crean dos matrices que contienen los mismos valores. El operador == comprueba la igualdad de dos listas.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
Producción
True
Conclusión
En este artículo, analizamos la diferencia entre los operadores __eq__, is y == en Python. El método __eq__ compara el objeto de la misma clase para determinar la igualdad de valores y el operador is verifica la ubicación de memoria del objeto que se está comparando. El operador == comprueba la igualdad de valores de los dos objetos.