Asignar Múltiples Valores
Aprende a asignar múltiples valores en Python: desempaquetado de tuplas, un valor a varias variables, asignación con asterisco y errores comunes con ejemplos.
Asignar múltiples valores en Python
Python te permite asignar valores a varias variables en una sola instrucción. Esto cubre cuatro patrones comunes que encontrarás en código real:
- Asignación múltiple — distintos valores a distintas variables en una sola línea.
- Asignación encadenada — el mismo valor a varias variables a la vez.
- Desempaquetado de iterables — extraer elementos de una lista, tupla o cualquier iterable.
- Asignación con asterisco — recoger el "resto" de longitud variable en una lista.
Cada patrón se explica a continuación con ejemplos ejecutables y los errores que debes vigilar.
Asignación múltiple (desempaquetado de tuplas)
La forma más común utiliza una lista de nombres separados por comas a la izquierda y una lista de valores correspondiente a la derecha:
variable1, variable2, variable3 = value1, value2, value3Python empaqueta el lado derecho en una tupla temporal y luego la desempaqueta en los nombres de la izquierda, de izquierda a derecha. El número de nombres y valores debe coincidir exactamente; si no coincide, Python lanza un ValueError.
Asignar tres variables de distintos tipos en una sola línea:
Salida:
Python
3.7
TrueEsto es equivalente a escribir tres instrucciones de asignación separadas, pero es más conciso y deja clara la relación entre los nombres de un vistazo.
Intercambiar variables
Dado que Python evalúa todo el lado derecho antes de realizar cualquier asignación, puedes intercambiar dos variables sin necesidad de una temporal:
x = 5
y = 10
# Before swapping
print("Before swapping")
print("x =", x)
print("y =", y)
# Swap in one line — no temp variable needed
x, y = y, x
# After swapping
print("After swapping")
print("x =", x)
print("y =", y)Salida:
Before swapping
x = 5
y = 10
After swapping
x = 10
y = 5En la mayoría de los otros lenguajes, este intercambio requiere una tercera variable temporal. La semántica de empaquetado de tuplas de Python hace que la instrucción de una sola línea sea segura.
ValueError: discordancia en el número de elementos
Si el número de valores no coincide con el número de nombres, Python lanza un ValueError de inmediato:
a, b = 1, 2, 3 # too many values
# ValueError: too many values to unpack (expected 2)
a, b, c = 1, 2 # too few values
# ValueError: not enough values to unpack (expected 3, got 2)Cuando veas este error, cuenta los nombres a la izquierda y los valores a la derecha — deben ser iguales, o necesitas la asignación con asterisco (ver más abajo).
Asignación encadenada (un valor, varias variables)
Para dar a varias variables el mismo valor inicial, encadena los operadores de asignación:
x = y = z = 0
print(x, y, z)Salida:
0 0 0Python evalúa 0 una sola vez y enlaza los tres nombres al mismo objeto. Esto funciona correctamente con objetos inmutables (enteros, strings, tuplas). Ten cuidado con los valores mutables predeterminados — los tres nombres apuntan al mismo objeto lista:
# Pitfall: shared mutable object
a = b = c = []
a.append(1)
print(b) # [1] — b is the same list, not a copy!Si necesitas listas independientes, usa una comprensión de lista o asignaciones separadas:
a, b, c = [], [], []Desempaquetar un iterable
Puedes desempaquetar cualquier iterable — una lista, tupla, string, range u otro — directamente en variables:
a, b, c = [10, 20, 30]
print(a, b, c)Salida:
10 20 30Este es el mismo mecanismo que la asignación múltiple; a Python no le importa si el lado derecho es una tupla literal o una variable lista. Por ejemplo, desempaquetar una tupla funciona de forma idéntica:
coords = (51.5, -0.1)
lat, lon = coords
print(lat) # 51.5
print(lon) # -0.1Consulta el capítulo Desempaquetar tuplas para una explicación más detallada de este patrón.
Asignación con asterisco (desempaquetado extendido)
Cuando no sabes cuántos elementos contiene un iterable, antepón * a un nombre para recoger los elementos restantes en una lista:
first, *rest = [10, 20, 30, 40]
print(first) # 10
print(rest) # [20, 30, 40]El nombre con asterisco puede aparecer en cualquier posición de la lista de destino — al inicio, en el medio o al final:
first, *middle, last = [10, 20, 30, 40]
print(first) # 10
print(middle) # [20, 30]
print(last) # 40*head, second_last, last = range(1, 6)
print(head) # [1, 2, 3]
print(second_last) # 4
print(last) # 5Reglas para la asignación con asterisco:
- Solo se permite un nombre con asterisco por instrucción.
- El nombre con asterisco siempre recoge una
list, incluso cuando coincide con cero o un elemento. - Todos los nombres sin asterisco deben coincidir exactamente con un elemento.
Cuándo usar cada patrón
| Patrón | Caso de uso típico |
|---|---|
a, b = 1, 2 | Devolver múltiples valores de una función; intercambiar dos variables |
x = y = z = 0 | Inicializar un grupo de contadores o indicadores al mismo valor |
a, b, c = my_list | Desempaquetar una secuencia de longitud fija en nombres significativos |
first, *rest = items | Separar el inicio del resto en una lista de longitud desconocida |
Temas relacionados
- Variables de Python — cómo funcionan las variables y las reglas de nomenclatura
- Nombres de variables — convenciones de nomenclatura (snake_case, palabras clave)
- Desempaquetar tuplas — cobertura detallada del desempaquetado de tuplas
- Listas de Python — fundamentos de listas referenciados en los ejemplos anteriores
- Variables globales — alcance y la palabra clave
global