Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

280
Views
¿Operador de comparación "==" para igualdad de valor o igualdad de referencia?

Muchos tutoriales han declarado que el operador de comparación == es para la igualdad de valores, como en esta respuesta , cita:

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

Sin embargo, descubrí que el documento de Python dice que:

x==y llama a x.__eq__(y) . De forma predeterminada, el object implementa __eq__() usando is , devolviendo NotImplemented en el caso de una comparación falsa: True if x is y else NotImplemented .

Parece que el comportamiento predeterminado del operador == es comparar la calidad de la referencia como el operador is , lo que contradice lo que dicen estos tutoriales.

Entonces, ¿para qué exactamente debo usar == ? ¿igualdad de valores o igualdad de referencia? O simplemente depende de cómo implemente el método __eq__ .


Creo que el documento de comparaciones de valores ha ilustrado esta pregunta claramente:

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. Uno puede pensar en ellos como definiendo el valor de un objeto indirectamente, por medio de su implementación de comparación.

El comportamiento de la comparación de igualdad predeterminada, que las instancias con diferentes identidades siempre son desiguales, puede contrastar con los tipos que necesitarán una definición sensata del valor del objeto y la igualdad basada en el valor. Dichos tipos deberán personalizar su comportamiento de comparación y, de hecho, varios tipos integrados lo han hecho.

El comportamiento predeterminado para la comparación de igualdad ( == y != ) se basa en la identidad de los objetos. Por lo tanto, la comparación de igualdad de instancias con la misma identidad da como resultado la igualdad, y la comparación de igualdad de instancias con diferentes identidades da como resultado la desigualdad. Una motivación para este comportamiento predeterminado 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.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Depende únicamente de lo que haga __eq__ . El __eq__ predeterminado de tipo object se comporta como is . Algunos tipos de datos incorporados usan su propia implementación. Por ejemplo, dos listas son iguales si todos sus valores son iguales. Solo tienes que saber esto.

over 4 years ago · Santiago Trujillo Report

0

object implementa __eq__() usando is , pero muchas clases en la biblioteca estándar implementan __eq__() usando igualdad de valores. P.ej:

 >>> l1 = [1, 2, 3] >>> l2 = [1, 2, 3] >>> l3 = l1 >>> l1 is l2 False >>> l1 == l2 True >>> l1 is l3 True

En sus propias clases, puede implementar __eq__() como tenga sentido, por ejemplo:

 class Point(): def __init__(self, x, y): self.x = x self.y = y def __eq__(self, other): return self.x == other.x and self.y == other.x
over 4 years ago · Santiago Trujillo Report

0

Para agregar su proceso de pensamiento con una definición simple,

El operador Igualdad == compara los valores de ambos operandos y verifica la igualdad de valores. Mientras que el operador is verifica si ambos operandos se refieren al mismo objeto o no (presente en la misma ubicación de memoria).

En pocas palabras, is comprueba si dos referencias apuntan al mismo objeto o no. == comprueba si dos objetos tienen el mismo valor o no.

Por ejemplo:

 a=[1,2,3] b=a #a and b point to the same object c=list(a) #c points to different object if a==b: print('#') #output:# if a is b: print('##') #output:## if a==c: print('###') #output:## if a is c: print('####') #no output as c and a point to different object
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!