es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operador de comparación “==”: ¿para igualdad de valor o igualdad de referencia?

Muchos tutoriales han afirmado que el operador de comparación == se utiliza para la igualdad de valor, como en esta respuesta, cita:

  • == es para la igualdad de valor. Úsalo cuando quieras saber si dos objetos tienen el mismo valor.
  • is es para la igualdad de referencia. Úsalo cuando quieras saber si dos referencias se refieren al mismo objeto.

Sin embargo, encontré que la documentación de Python dice lo siguiente:

x==y llama a x.__eq__(y). Por defecto, object implementa __eq__() utilizando is, devolviendo NotImplemented en caso de una comparación falsa: True if x is y else NotImplemented.”

Parece que el comportamiento por defecto del operador == es comparar la igualdad de referencia, al igual que el operador is, lo cual contradice lo que dicen estos tutoriales.

Entonces, ¿exactamente para qué debo utilizar ==? ¿igualdad de valor o igualdad de referencia? ¿O depende de cómo implementes el método __eq__?


Creo que la documentación de Comparaciones de valor ha ilustrado claramente esta pregunta:

Los operadores <, >, ==, >=, <= y != comparan los valores de dos objetos. El valor de un objeto es una noción bastante abstracta en Python. Los operadores de comparación implementan una noción particular de cuál es el valor de un objeto. Se puede pensar en ellos como definiendo el valor de un objeto indirectamente, mediante su implementación de comparación.

El comportamiento de la comparación de igualdad por defecto, donde las instancias con identidades diferentes siempre son desiguales, puede estar en contraste con los tipos que necesitan tener una definición sensata de valor de objeto y de igualdad basada en el valor. Dichos tipos necesitarán personalizar su comportamiento de comparación y, de hecho, varios tipos integrados lo han hecho.

El comportamiento por defecto para la comparación de igualdad (== y !=) se basa en la identidad de los objetos. Por lo tanto, la comparación de igualdad entre instancias con la misma identidad da como resultado la igualdad, y la comparación de igualdad entre instancias con identidades diferentes da como resultado la desigualdad. Una motivación para este comportamiento por defecto es el deseo de que todos los objetos sean reflexivos (es decir, x is y implica x == y).

También incluye una lista que describe el comportamiento de comparación de los tipos integrados más importantes, como números, cadenas y secuencias, etc.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según la documentación de Python, el comportamiento predeterminado del operador == compara la identidad de los objetos, similar al operador is. Sin embargo, el comportamiento de la comparación de valores depende en última instancia de cómo se implementa el método __eq__().

    Por lo tanto, si se debe utilizar == para la igualdad de valores o la igualdad de referencias depende de la implementación del método __eq__() en los objetos que se están comparando. Algunos tipos integrados ya han personalizado su comportamiento de comparación, mientras que otros desarrolladores pueden necesitar hacerlo para sus propios tipos definidos.

Comments are closed.