Python: Variables y referencias de memoria
Al finalizar este tema
Comprenderá que en Python las variables no son "cajas que contienen valores", sino "etiquetas que apuntan a objetos".
Las variables no son cajas
Muchos libros de texto describen las variables como "cajas que contienen valores". Sin embargo, en Python, esta analogía es incorrecta.
a = 10Este código no significa "poner 10 en una caja llamada 'a'". Más precisamente:
- Se crea un objeto entero
10en la memoria. - El nombre
aapunta (hace referencia) a ese objeto.
a = 10b = a # b also points to the same object 10
print(id(a)) # 4350114064print(id(b)) # 4350114064 ← Same address!print(a is b) # True ← Pointing to the same objectid() devuelve la dirección de memoria del objeto. a y b apuntan a la misma dirección. No se ha copiado el valor, sino que se le ha puesto una etiqueta adicional al mismo objeto.
La reasignación es mover la etiqueta
a = 10b = aa = 20 # Connect a to a new value
print(a) # 20print(b) # 10 ← b still points to the original objecta = 20 no significa "cambiar el objeto al que apunta 'a' por 20". Se crea un nuevo objeto 20 en la memoria, y la etiqueta a se ha desplazado hacia él. b sigue apuntando al objeto original 10.
== vs is
x = [1, 2, 3]y = [1, 2, 3]
print(x == y) # True ← Values are equalprint(x is y) # False ← Different objects
z = xprint(x is z) # True ← Pointing to the same object| Operador | Comparación | Significado |
|---|---|---|
== | Valor | ¿El contenido es el mismo? |
is | Identidad | ¿Es el mismo objeto? (dirección de memoria) |
"Dos libros con el mismo contenido" es True con == y False con is. Si "dos personas sostienen el mismo libro", ambos son True.
Tipos de datos y conversión
Tipos de datos básicos de Python:
# Numbersinteger = 42 # int (integer)floating = 3.14 # float (float)
# Cadena de textotext = "Hola" # str
# Booleanoflag = True # bool (True/False)
# None — tipo especial que representa "sin valor"result = None
# Comprobar el tipoprint(type(42)) # <class 'int'>print(type("hello")) # <class 'str'>Conversión de tipos
# Cadena de texto → Númeroage = int("25") # 25price = float("9.99") # 9.99
# Número → Cadena de textostr(42) # "42"
# Precaución: si no se puede convertir, genera un errorint("hello") # ValueError!Reglas de nomenclatura
# Buen nombre de variable — un nombre que revela el significadouser_name = "Kim Hoon"total_score = 95is_active = True
# Mal nombre de variablex = "Kim Hoon" # No se sabe qué valor esa1 = 95 # Significado no claro
# Reglas# - Se pueden usar letras en inglés, números y guiones bajos (_)# - No se puede comenzar con un número (2name → error)# - Se recomienda snake_case (convención de Python)# - No se pueden usar palabras reservadas (if, for, class, etc.)En Python, se prefiere snake_case sobre camelCase. Se usa user_name en lugar de userName. Esta es una recomendación de PEP 8 (la guía de estilo oficial de Python).