Última actualización: 04 de diciembre de 2023

4.3. Operadores de identidad

El operador de identidad is indica si dos variables hacen referencia al mismo objeto. Esto implica que si dos variables distintas tienen el mismo id(), el resultado de aplicar el operador is sobre ellas será True.

4.3.1. Operador is

El operador is, significa, que prueba identidad: ambos lados de la expresión condicional debe ser el mismo objecto:

>>> a, b = 10, 10.0
>>> print(a is b)
False
>>> a, b = 10, 10
>>> print(a is b)
True

Esto es debido a que Python reutiliza el mismo objeto que almacena el valor 10 para ambas variables. De hecho, si usamos la función id(), podemos ver que el objeto es el mismo.

>>> a, b = 1, 1.0
>>> id(a)
9801248
>>> id(b)
140676746660560
>>> id(a) == id(b)
False
>>> a, b = 1, 1
>>> id(a)
9807616
>>> id(b)
9807616
>>> id(a) == id(b)
True

4.3.2. Operador is not

El operador is not, es la negación el contrario de operador is, devuelve False si no hacen referencia a el mismo objeto.

>>> c = 4
>>> d = [1, 2, 3]
>>> print(c is not d)
True
>>> c = 1
>>> print(c is not d)
False

En el ejemplo anterior, si b es una lista, este prueba que 4 y 1 sean elementos de la lista b.

4.3.3. Ejemplos

A continuación, se presentan algunos ejemplos de su uso:

Operador de identidad is:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
monto_inicial = 200
monto_final = 200
print(monto_inicial is monto_final)
print(
    "{monto_inicial} su id es {monto_inicial_id}".format(
        monto_inicial=monto_inicial, monto_inicial_id=id(monto_inicial)
    )
)
print(
    "{monto_final} su id es {monto_final_id}".format(
        monto_final=monto_final, monto_final_id=id(monto_final)
    )
)
monto_final = 200.0
print(monto_inicial is monto_final)
print(
    "{monto_inicial} su id es {monto_inicial_id}".format(
        monto_inicial=monto_inicial, monto_inicial_id=id(monto_inicial)
    )
)
print(
    "{monto_final} su id es {monto_final_id}".format(
        monto_final=monto_final, monto_final_id=id(monto_final)
    )
)

El código anterior muestra el siguiente resultado:

Operador is
===========
True
200 su id es 9807616
200 su id es 9807616
False
200 su id es 9807616
200.0 su id es 139992306955312

Operador de identidad is not:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
print(
    "Python crea dos objetos diferentes, uno para cada lista. Las listas son mutables."
)
lista = [1, 2, 3]
lista_alterna = [1, 2, 3]
print(lista is not lista_alterna)
print(f"{lista} su id es {id(lista)}")
print(
    "{lista_alterna} su id es {lista_alterna_id}".format(
        lista_alterna=lista_alterna, lista_alterna_id=id(lista_alterna)
    )
)

print(
    "Python reutiliza el objeto que almacena 5 por lo que ambas variables apuntan a el mismo."
)
monto_inicial = 200
monto_final = 200
print(monto_inicial is not monto_final)
print(
    "{monto_inicial} su id es {monto_inicial_id}".format(
        monto_inicial=monto_inicial, monto_inicial_id=id(monto_inicial)
    )
)
print(
    "{monto_final} su id es {monto_final_id}".format(
        monto_final=monto_final, monto_final_id=id(monto_final)
    )
)

El código anterior muestra el siguiente resultado:

Operador is not
===============
Python crea dos objetos diferentes, uno para cada lista. Las listas son mutables.
True
[1, 2, 3] su id es 140338744545664
[1, 2, 3] su id es 140338744540864
Python reutiliza el objeto que almacena 5 por lo que ambas variables apuntan a el mismo.
False
200 su id es 9807616
200 su id es 9807616

Importante

Usted puede descargar el código usado en esta sección haciendo clic aquí.

Truco

Para ejecutar el código operadores_identidad.py, abra una consola de comando, acceda al directorio donde se encuentra el mismo, y ejecute el siguiente comando:

$ python operadores_identidad.py

Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.