valor una referencia recibir procedimientos por paso pasar parametros parametro omision objeto lista funciones como python reference equality

una - Prueba de igualdad de referencia en Python



paso por valor y referencia (3)

Digamos que tengo una clase en Python que tiene un método eq definido para comparar atributos para la igualdad:

class Foo(object): # init code... def __eq__(self, other): # usual eq code here....

¿Cómo puedo comparar dos instancias de Foo para la igualdad de referencia (eso es prueba si son la misma instancia)? Si lo hago:

f1 = Foo() f2 = Foo() print f1 == f2

Me pongo Verdadero aunque sean objetos diferentes.


Ese is operador

print f1 is f2


Utilice la palabra clave is .

print f1 is f2

Algunas cosas interesantes (que dependen de la implementación, creo, pero son ciertas en CPython) con la palabra clave is es que None, True y False son todas instancias singleton. Así que True is True devolverá True

Las cadenas también se internan en CPython, por lo que ''hello world'' is ''hello world'' devolverá True (no debes confiar en esto en el código normal).


f1 is f2 comprueba si dos referencias son al mismo objeto. Bajo el capó, esto compara los resultados de id(f1) == id(f2) mediante la función incorporada de id , que devuelve un número entero que se garantiza exclusivo para el objeto (pero solo dentro del tiempo de vida del objeto).

Bajo CPython, este entero es la dirección del objeto en la memoria, aunque los documentos mencionan que debe fingir que no lo sabe (ya que otras implementaciones pueden tener otros métodos para generar el ID).