Herencia: el operador is
También existe un operador de Python que vale la pena mencionar, ya que se refiere directamente a los objetos: aquí está:
objetoUno is objetoDos
El operador is
verifica si dos variables (en este caso objetoUno
y objetoDos
) se refieren al mismo objeto.
No olvides que las variables no almacenan los objetos en sí, sino solo los identificadores que apuntan a la memoria interna de Python.
Asignar un valor de una variable de objeto a otra variable no copia el objeto, sino solo su identificador. Es por ello que un operador como is
puede ser muy útil en ciertas circunstancias.
Echa un vistazo al código en el editor. Analicémoslo:
- Existe una clase muy simple equipada con un constructor simple, que crea una sola propiedad. La clase se usa para instanciar dos objetos. El primero se asigna a otra variable, y su propiedad
val
se incrementa en uno. - Luego, el operador
is
se aplica tres veces para verificar todos los pares de objetos posibles, y todos los valores de la propiedadval
son mostrados en pantalla. - La última parte del código lleva a cabo otro experimento. Después de tres tareas, ambas cadenas contienen los mismos textos, pero estos textos se almacenan en diferentes objetos.
El código imprime:
False
False
True
1 2 1
True False
Los resultados prueban que ob1
y ob3
son en realidad los mismos objetos, mientras que str1
y str2
no lo son, a pesar de que su contenido sea el mismo.
Code
class ClaseMuestra:def __init__(self, val):
self.val = val
ob1 = ClaseMuestra(0)
ob2 = ClaseMuestra(2)
ob3 = ob1
ob3.val += 1
print(ob1 is ob2)
print(ob2 is ob3)
print(ob3 is ob1)
print(ob1.val, ob2.val, ob3.val)
str1 = "Mary tenía un "
str2 = "Mary tenía un corderito"
str1 += "corderito"
print(str1 == str2, str1 is str2)