El aeropuerto de las etiquetas: el modelo de objetos de Python
·
Resumen del curso
1
La etiqueta no es la maleta: nombres y objetos
2
Maletas selladas: mutable e inmutable
3
Maletas dentro de maletas: contenedores y copias
4
Al entregar una maleta: funciones y argumentos
5
Zonas y pases: ámbitos
6
Equipaje de mano: clausuras
7
La especificación de la maleta: clases e instancias
8
Procedimientos estándar del aeropuerto: métodos dunder
9
La especificación de la especificación: herencia y MRO
10
El control: el secreto del acceso a atributos
11
Maletas sin dueño: memoria y GC
12
Números de taquilla: hash, igualdad y repaso final
Tiempo 0:00–0:50
Parte de equipaje perdido
LOST-001
Lo reporta
Park, agente de una agencia de viajes
Qué se perdió
La lista de recuerdos para un grupo. Hizo una «copia» de reserva de la lista, le añadió un imán y el imán apareció también en la lista original.
Para cerrar el caso
Demostrar con código que las dos listas fueron desde el principio la misma maleta, y crear una lista de reserva de verdad.
Aeropuerto Internacional Haneulseom · Centro de equipajes
Primer día de trabajo, por la mañana. La supervisora Do Miran te entrega un fajo de etiquetas delante de la cinta transportadora. «Hay una frase que tienes que aprenderte antes que nada en este centro: una maleta, muchas etiquetas.»
El primer parte viene de una agencia de viajes. Hicieron una segunda lista de recuerdos como reserva, pero todo lo que apuntan en la reserva aparece también en la lista original. La supervisora mira el código y sonríe. «¿Dos listas? Dos etiquetas, más bien.»
= cuelga una etiqueta (9 min)Este es el código del parte:
souvenirs = ["postcard", "keyring"]
backup = souvenirs
backup.append("magnet")
print(souvenirs)
# ['postcard', 'keyring', 'magnet']backup = souvenirs no copia la lista. Cuelga una etiqueta más, backup, de la misma maleta que ya llevaba la etiqueta souvenirs. Desde el principio solo había una maleta, y backup.append metió el imán en esa única maleta.
= evalúa primero el lado derecho para obtener un objeto (la maleta) y luego ata el nombre de la izquierda (la etiqueta) a ese objeto.Avanza línea a línea en el tablero de etiquetas de abajo. La columna izquierda son las etiquetas y la derecha, las maletas. Antes de la línea 3 tendrás que predecir el resultado para poder seguir.
Tablero de etiquetas
Paso 1 / 0
Lo siguiente que se ejecuta: 0
Preparando el laboratorio…
Acaba de cambiar
Maleta sellada (inmutable)
Todo objeto tiene tres cosas.
| Cómo se consulta | En el aeropuerto sería | |
|---|---|---|
| Identidad (identity) | id(obj), a is b | El número único grabado en la base de la maleta |
| Tipo (type) | type(obj) | La clase de maleta (trolley, mochila…) |
| Valor (value) | Se compara con == | Lo que lleva dentro |
x = ["postcard"]
y = ["postcard"]
print(x == y, x is y)
# True False
print(id(x) == id(y), id(souvenirs) == id(backup))
# False Truex e y son maletas distintas con exactamente el mismo contenido. == da True; is, False.souvenirs y backup son la misma maleta, así que también tienen el mismo id.id no significa nada por sí mismo. En CPython es una dirección de memoria, pero cambia en cada ejecución. Úsalo solo para comparar.print(type(x), type(len))
# <class 'list'> <class 'builtin_function_or_method'>Pin dice
→ is pregunta «¿es la misma maleta?» y == pregunta «¿lleva lo mismo dentro?». Para comparar valores, usa siempre ==. Deja is para comprobar objetos que solo existen una vez, como en x is None.
No solo los números y las listas son objetos. Las funciones, las clases y los módulos también son objetos atados a nombres.
shout = print
shout("boarding")
# boarding
print(shout is print)
# True
def greet():
return "hi"
print(type(greet), greet.__name__)
# <class 'function'> greet
alias = greet
del greet
print(alias())
# hidef greet(): crea un objeto función y le ata el nombre greet: en el fondo es una especie de asignación.del greet quite el nombre, alias sigue apuntando al mismo objeto función, así que la función sigue ahí.type(int) como type(type) son <class 'type'>. Volveremos a esto en la lección 7.Con un nombre solo puedes hacer dos cosas:
a = .... Ata el nombre a otro objeto. La maleta original no cambia.a.append(...), a[0] = .... El nombre sigue donde estaba y lo que cambia es el contenido de la maleta. El cambio se ve desde todos los nombres que apuntan a esa maleta.a = [1, 2]
b = a
a = a + [3]
print(a, b, a is b)
# [1, 2, 3] [1, 2] Falsea = [1, 2]
b = a
a.append(3)
print(a, b, a is b)
# [1, 2, 3] [1, 2, 3] Truea + [3] crea una lista nueva, y a = mueve la etiqueta a a esa lista nueva. b se queda en la maleta original. En cambio, append modifica la propia maleta, así que el cambio también se ve desde b. Ejecuta abajo las dos versiones, alternando entre una y otra.
Tablero de etiquetas
Paso 1 / 0
Lo siguiente que se ejecuta: 0
Preparando el laboratorio…
Acaba de cambiar
Maleta sellada (inmutable)
1 y el 2 de las casillas son valores pequeños, así que se escriben como valores en lugar de flechas. En realidad también son objetos, y la lista guarda referencias a ellos (lección 3).a += [3], a cuál de los dos se parece? Con listas, cambia la maleta. Pero con números o cadenas, mueve la etiqueta. Esas dos caras son el tema de la lección 2.del quita la etiqueta, no la maleta (6 min)c = ["tag"]
d = c
del c
print(d)
# ['tag']
print(c)
# NameError: name 'c' is not defineddel c solo elimina el nombre c; no borra la lista. Como d todavía apunta a ella, la maleta sigue ahí. Una maleta desaparece de verdad cuando ninguna etiqueta apunta ya a ella (lección 11).
Intercambiar dos nombres con p, q = q, p también es mover etiquetas. Primero se construye una tupla con el lado derecho, q, p, y luego los nombres de la izquierda se atan, por orden, a los objetos que contiene.
p, q = "left", "right"
p, q = q, p
print(p, q)
# right leftAquí está la prueba de que las dos listas del parte eran la misma maleta, y la forma de crear una lista de reserva de verdad.
souvenirs = ["postcard", "keyring"]
backup = souvenirs
backup.append("magnet")
print(souvenirs is backup, id(souvenirs) == id(backup))
# True True
safe = list(souvenirs) # crea una maleta nueva con el mismo contenido
safe.append("mug")
print(souvenirs, safe, safe is souvenirs)
# ['postcard', 'keyring', 'magnet'] ['postcard', 'keyring', 'magnet', 'mug'] Falselist(souvenirs) crea una lista nueva. Ahora puedes meter una taza en safe y la lista original no cambia. (Que esta copia solo cree de nuevo «un nivel» es algo que veremos en la lección 3.)
Al final de la jornada, Pin señala hacia la cinta 13. Hay un aviso: dos maletas sin ninguna etiqueta siguen dando vueltas. La supervisora se limita a decir «si no tienen etiquetas, ya deberían haberlas retirado» y apaga la pantalla.
Informe de cierre — LOST-001. La lista siempre fue una sola; lo que había eran dos etiquetas. Comprobado con is e id; resuelto creando una lista nueva con list().
x = [0], y = x y x = [1], ¿qué vale y? Dibuja primero el esquema y luego ejecútalo para comprobarlo.a = [1, 2], crea b = a[:] y c = a, y predice el resultado de a is b, a is c y a == b.print y luego haces del print? En la lección 5 verás dónde viven los nombres integrados.La libreta de la supervisora
Una variable no es una caja, es una etiqueta. = ata el nombre de la izquierda al objeto de la derecha.
Las tres cosas de un objeto: identidad (id, is), tipo (type) y valor (==).
is mira si es el mismo objeto; == mira si el valor es igual. Para comparar valores, siempre ==.
Funciones, clases y módulos también son objetos. def también es una asignación que ata un nombre.
Reasignar (a = …) mueve el nombre; mutar (a.append …) cambia el objeto.
del solo quita el nombre; el objeto desaparece cuando ya nadie apunta a él.
Recibe avisos de nuevas lecciones
Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.
R
ReflexKR
Aprende Python y Reflex haciendo. Todos los ejemplos se ejecutaron y verificaron en Reflex 0.10.0.
ReflexKR es gratis y sin banners publicitarios. Si te ayudó, puedes apoyarlo con un café. ☕ Invítanos un café
Aviso de afiliados© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
Preguntas y respuestas
Pregunta lo que quieras sobre esta lección. Aquí se reúnen las preguntas de todas las versiones de idioma de esta página.