1
Instrucciones de
asignación
Sintaxis y
comportamiento
Introducción
El nombre es para el programador como el objeto es para el ordenador
Como programador, escribes programas, y un programa es, en esencia, un conjunto de
instrucciones que el ordenador puede ejecutar.
Entre estas instrucciones, una de las más fundamentales es la instrucción de asignación,
que permite asociar un nombre a un objeto.
Esta asociación se realiza mediante el operador de asignación (=), el cual vincula un
identificador (el nombre) con un objeto (el dato en memoria).
Es decir, cuando escribes una línea como:
temperatura = 23
estás indicando que el nombre temperatura debe referirse al objeto 23, que es un número
entero (int).
De esta forma, los nombres permiten al programador referirse a los objetos del programa
de manera comprensible, mientras que el ordenador trabaja directamente con los objetos
en memoria.
Por ejemplo, el número 15, escrito en el código fuente, puede tener muchos significados en
el mundo real: puede ser la edad de una persona, el peso de un paquete o la temperatura
del agua.
Sin embargo, para el ordenador es siempre lo mismo: un objeto de tipo int con valor
15.
Por eso es fundamental que el programador asigne nombres significativos a los objetos,
para que el código refleje con claridad qué representa cada dato en el contexto del problema
que se está resolviendo.
En otras palabras, los nombres conectan el mundo del programador (real y
conceptual) con el mundo interno del ordenador (abstracto y técnico).
Así, un buen programador no escribe simplemente:
x = 15
sino que elige un nombre que exprese claramente su intención:
edad_persona = 15
De este modo, el código se vuelve más legible, mantenible y significativo, tanto para él
mismo como para otros que lo lean en el futuro.
Instrucciones de asignación simples en Python
En todo programa, es esencial guardar datos, darles nombre y reutilizarlos a lo largo del
código. Python ofrece una forma sencilla y potente de lograr esto: la instrucción de
asignación.
La asignación permite al programador asociar un nombre (identificador) con un objeto en
memoria, de modo que se pueda acceder a dicho objeto de forma comprensible y
reutilizable.
Esta sección se centra en las asignaciones simples, que constituyen la base de la
manipulación de datos en Python.
¿Qué es una instrucción de asignación?
Una instrucción de asignación es una orden que le indica al intérprete de Python que asocie
un nombre con un objeto. En su forma más simple, se escribe así:
nombre = expresión
nombre es un identificador válido (una palabra definida por el programador).
expresión es cualquier valor o cálculo que produce un objeto.
= es el operador de asignación, que no representa igualdad matemática, sino vinculación.
Por ejemplo:
edad = 1
Aquí, edad es el nombre que el programador elige, y 1 es un objeto de tipo entero (int) que
existe en memoria. A partir del momento en que el intérprete lee y ejecuta la instrucción de
asignación se considera que el nombre edad ha sido declarado en el código y que
referencia ese objeto.
Graficando lo anterior en la memoria:
Instrucción Situación del objeto en la memoria RAM
edad = 1 2838012524543
El papel del nombre y del objeto
Es importante entender que en Python:
• El nombre (edad) es solo una etiqueta o referencia.
• El objeto (30) es el dato real que vive en la memoria RAM. Los objetos en Python
tienen valor, tipo e identidad.
• El nombre es útil para el programador; el objeto es lo que Python realmente
manipula.
Las siguientes líneas de código permite expresar con claridad qué representa un valor:
temperatura = 22.5
peso = 70
nombre = "Lucía"
Aunque todos son solo objetos para Python, para el programador estos nombres tienen
significados distintos. Por eso, elegir nombres descriptivos mejora la claridad del
programa.
Evaluación de la expresión
Antes de realizar la asignación, Python evalúa lo que está a la derecha del signo =.
Esto significa que primero se calcula o se obtiene el valor, y luego se asigna.
Ejemplo:
x = 3 + 2
• Primero se evalúa 3 + 2, que da 5.
• Luego, x se une al objeto 5.
Reasignación
Un nombre puede cambiar la referencia al objeto:
x = 10
x = x + 5 # Ahora x se refiere a 15, no a 10
Aquí, x + 5 se evalúa primero (10 + 5 = 15), y después el nombre x se actualiza para referirse
al nuevo objeto 15.
Múltiples asignaciones en una línea (sintaxis válida)
Python permite algunas formas útiles de multiples asignación simple:
Asignación múltiple con un mismo valor:
Ejemplo:
a = b = c = 0
Todos los nombres apuntan al mismo objeto 0
Asignación paralela:
x, z = 1, 2
x se refiere a 1 y z a 2. en este caso, el orden de las asignaciones es de izquierda a
derecha, es decir, primero x = 1 y luego z = 2
Esto es una forma concisa de asignar varios valores a varios nombres en una sola line
física.
Asignación múltiple, desempaquetado y objetos
mutables
En Python, la instrucción de asignación es más flexible de lo que parece a simple vista.
Además de asignaciones simples, el lenguaje permite realizar asignaciones múltiples y
desempaquetado, lo que resulta útil para escribir código más conciso y expresivo.
En esta sección exploraremos:
• Asignación múltiple en una sola línea
• Asignación paralela y desempaquetado de secuencias
• Relación entre nombres y objetos mutables
Asignación múltiple con un mismo valor
Es posible asignar el mismo objeto a varios nombres en una sola línea:
a = b = c = 0
Aquí:
• Se crea el objeto 0 (si no existe ya).
• Luego, los nombres a, b y c se vinculan al mismo objeto en memoria.
Esto puede ser útil para inicializar múltiples variables con el mismo valor, aunque debe
usarse con cuidado cuando el valor es mutable (ver sección 2.5).
Asignación paralela
Python permite asignar varios valores a varias variables en una sola línea física, usando
una sintaxis tipo tupla:
x, z = 1, 2
Esto se llama asignación paralela, y es equivalente a:
x = 1
z = 2
o es equivalente a:
t = (1, 2)
x = t[0]
y = t[1]
notes que el orden de asignación es de izquierda a derecha.
La asignación paralela es muy utilizada, por ejemplo, para intercambiar valores:
x = 1
z = 2
x, z, x = z, x, x
en este caso, Python evalúa toda la parte derecha (expresiones) antes de realizar
cualquier asignación. La línea 3 quedaría entonces:
x, z, x = 2, 1, 1
luego se realizan las asignaciones de izquierda a derecha:
x = 2, z = 1 y x = 1
Recuerda, en una asignación paralela donde hay expresiones al lado derecho primero
Python evalúa las expresiones y luego realiza las asignaciones; tanto la evaluación
de las expresiones como las asignaciones se realizan de izquierda a derecha.
Pero Python no deja de sorprendernos, tiene otro comportamiento interesante y es el que
observamos en relación a la existencia en memoria del objeto tipo int de valor 1 del ejemplo
anterior; una vez que el interprete de Python lee y ejecuta la instrucción de la linea 3 el
objeto tipo int queda des referenciado en relación al nombre edad y en consecuencia deja
de existir en la memoria debido a que Python en su modelo de gestión de memoria,
diseñado para optimizar el uso de esta, cuenta con un contador de referencias de cada
objetos en memoria y un recolector de basura; cuando el recuento de referencia para
un objeto llega a cero, el recolector de basura lo elimina de la memoria.
Otro comportamiento relevante de Python relacionado con la optimización de la memoria y
las instrucciones de asignación es que reutiliza objetos inmutables pequeños, como
enteros entre -5 y 256 inclusive. Es decir, Python no permite repeticiones en la memoria
de esta clase de objetos.
Para ilustrar lo anterior veamos el siguiente ejemplo de código:
1 a = 3
2 b = 3
3 c = 'Un año'
4 d = 'Un año'
Una vez ejecutadas todas las instrucciones de asignación, los nombres (a, b, c y d) y
objetos (3, 3, 'Un año' y 'Un año') se crean en la memoria y se unen según muestra la
siguiente imagen:
Vemos entonces que los nombres a y b apuntan al mismo objeto en memoria, igual caso
para los nombres c y d. En el código fuente hay cuatro objetos, pero en memoria se han
creado solo 2 objetos. Podemos verificar que a y b apuntan al mismo objeto en memoria
mediante la instrucciones de comparación a is b; igual caso para c y d.
Modificando elementos de objetos mutables
Retomando la utilidad de las instrucciones de asignación, estas también nos permiten
modificar los elementos de objetos mutables, tales como:
• Listas (list)
• Diccionarios (dict)
• Conjuntos (set)
• Otros
Veamos el siguiente ejemplo de código:
1 a = [1, 2, 3]
2 b = a
3 b[1] = 66 # Modifica el 2° elemento de la lista
4 print(a)
Observa los objetos creados en la memoria:
2838012524543
Instrucción Situación de los objetos en la memoria RAM
2838012525552
1 a = [1, 2, 3]
2 b = a
3 b[1] = 66
En la línea 1: Se crea en el heap(montón privado) un objeto list y 3 objetos int de valores 1,
2 y 3. En el stack(pila) se crea 1 nombre (a) el cual apunta al objeto list
En la línea 2: En el stack(pila) se crea 1 nombre (b) el cual apunta al objeto list
En la línea 3: El índice 1 de la lista apunta al objeto int de valor 66 (se modifica el 2° elemento
de la lista. El objeto int de valor 2 es borrado del heap)