Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Identidad y Pertenencia (Etiquetas y Grupos)

Dos operadores que hacen preguntas muy concretas sobre las cajas del almacén. No son operadores de comparación genéricos: cada uno tiene un propósito puntual y usarlos donde no corresponde genera confusión.

1. Operadores de Pertenencia (in)

Preguntan: “¿Está este elemento DENTRO de este contenedor?”

Sirve para buscar en listas, tuplas, diccionarios o cadenas de texto. Corto, directo, y uno de los operadores más usados en la práctica real.

  • in: ¿Está adentro?
  • not in: ¿NO está adentro?
invitados = ["Ana", "Beto", "Carla"]
usuario = "Daniel"

print(usuario in invitados)   # False: Daniel no aparece
print("Ana" in invitados)     # True: Ana sí está
print(usuario not in invitados)  # True: la pregunta inversa

2. El Operador de Identidad (is)

Existe otro operador que parece comparar, pero hace algo distinto: is. No pregunta “¿valen lo mismo?” (eso es ==), sino “¿son exactamente el mismo estante?”: el mismo objeto físico en la memoria, no dos estantes con el mismo contenido.

Dos estantes pueden tener lo mismo dentro sin ser el mismo estante. == mira el contenido. is mira la identidad. (De hecho ya lo usaste: el Ejercicio 5.9 te hizo cazar un alias con is antes de tener el nombre formal.)

a = [1, 2, 3]
b = [1, 2, 3]
c = a

Antes de imprimir nada, predice: ¿qué da a == b? ¿Y a is b? ¿Y a is c?

print(a == b)
print(a is b)
print(a is c)

a == b da True: mismo contenido. a is b da False: son dos estantes distintos, aunque tengan lo mismo dentro. a is c da True: c es otra etiqueta sobre el MISMO estante que a.

En la práctica: úsalo solo con None

Para casi todo vas a usar ==. El único uso cotidiano de is es comprobar si una variable es None (la caja vacía reservada):

precio = None

print(precio is None)      # True
print(precio is not None)  # False

Para None siempre se escribe is None (o is not None), nunca == None. Es la convención oficial de Python (PEP 8) y la verás en todo código profesional.

¡Ojo!: no uses is para comparar valores. Escribir numero is 5 o texto is "hola" está mal, y Python te avisa: lanza SyntaxWarning: "is" with 'int' literal. Did you mean "=="?. A veces “funciona por casualidad” con números pequeños (−5 a 256) porque Python reutiliza esos objetos internamente, pero es un accidente de implementación, no algo en lo que apoyarte. Para comparar contenido, siempre ==.