- Fundamentos de la asignación dinámica y el uso de identificadores bajo la norma PEP 8.
- Diferencias críticas entre literales, expresiones y el funcionamiento de la memoria mediante etiquetas.
- Gestión de tipos de datos nativos, inmutabilidad y el proceso de recolección de basura del lenguaje.
Cuando nos metemos en el mundo de la programación, lo primero con lo que nos topamos es con el concepto de variables. Básicamente, piensa en ellas como recipientes donde guardamos datos para no tener que escribirlos una y otra vez, permitiéndonos darles nombres que tengan sentido para que cualquiera que lea el código sepa de qué va la vaina.
En Python, este proceso es especialmente cómodo porque el lenguaje es muy flexible. A diferencia de otros idiomas informáticos más rígidos, aquí no hace falta que le digas al ordenador qué tipo de dato vas a guardar; el sistema es lo suficientemente listo para inferir el tipo automáticamente basándose en el valor que le asignes en ese momento.
Cómo asignar valores a tus variables
Para darle un valor a una variable utilizamos el operador =, que actúa como una flecha que apunta hacia la izquierda. Esto significa que el identificador válido que pongas a la izquierda almacenará lo que resulte de la expresión o el dato que pongas a la derecha.
Podemos hacer esto de dos formas principales:
- Asignaciones simples: Es lo más habitual, donde una sola variable recibe un valor. Por ejemplo, podemos guardar un color como cadena de texto, un número entero para contar cartas o una lista de la compra.
- Asignaciones múltiples: Python nos permite ahorrar líneas de código asignando varios valores a la vez. Podemos hacer que dos variables reciban dos valores distintos en una sola sentencia o incluso asignar el mismo valor a varias etiquetas simultáneamente.
Literales frente a expresiones
Es fundamental distinguir entre qué es un literal y qué es una expresión al momento de programar. Los literales son datos estáticos que escribimos directamente en el código; es decir, si miras la línea, ya sabes exactamente qué valor tiene (como un número 5 o la palabra ‘Hola’).
Por otro lado, las expresiones son dinámicas. Aquí el valor final no se conoce solo mirando el código, sino que depende de la evaluación de una o varias sentencias, como sumar dos variables previas o concatenar textos que vienen de otra parte del programa.
Reglas para nombrar variables y palabras prohibidas
No podemos ponerle cualquier nombre a nuestras variables si queremos que el código sea profesional y funcione. Siguiendo la guía de estilo PEP 8, lo ideal es usar el formato snake_case, que consiste en escribir todo en minúsculas y separar las palabras con guiones bajos.
Hay algunas reglas de oro que no puedes saltarte: deben empezar obligatoriamente por una letra o un guion bajo, no pueden comenzar con números y deben ser descriptivas. Además, existen las keywords o palabras reservadas (como if, while, class o return) que Python usa para su propia lógica y que tenemos prohibido usar como nombres de variables. Para comprobar si una palabra está prohibida, puedes usar la herramienta keyword.iskeyword().
Tipos de datos y el intérprete como calculadora

Python es genial porque podemos usar su intérprete para hacer cuentas rápidas. Aquí es donde empezamos a ver los tipos de datos nativos. Los más comunes son los enteros (int), los números reales o flotantes (float) y las cadenas de texto (str). También soporta de forma nativa los números complejos (complex), algo muy útil en ingeniería.
Cuando mezclamos tipos, por ejemplo sumando un entero y un flotante, Python hace una conversión automática hacia el tipo más general, que en este caso sería el float. En cuanto al texto, podemos usar comillas simples, dobles o incluso triples si queremos que la cadena ocupe varias líneas.
Operaciones aritméticas y precedencia
El lenguaje ofrece una batería completa de operadores. Además de la suma y resta, tenemos la multiplicación (*), la división (/) y la exponenciación (**). Es importante notar que la división siempre devuelve un float, incluso si el resultado es exacto.
Para los que necesitan trabajar solo con enteros, existen la división entera (//), que trunca el resultado, y el operador de módulo (%), que nos devuelve el resto de la división. Al combinar operaciones, Python sigue reglas de precedencia matemática: primero potencias, luego multiplicaciones/divisiones y al final sumas/restas. Si quieres cambiar este orden, la solución es usar paréntesis.
El funcionamiento interno: Memoria e Inmutabilidad
Aquí es donde Python se diferencia radicalmente de lenguajes como C++. En Python, las variables no son cajas donde metemos cosas, sino etiquetas o alias que apuntan a un objeto en la memoria. Si dos variables tienen el mismo valor, ambas pueden estar apuntando al mismo sitio.
Muchos de estos objetos, como los enteros y los strings, son inmutables. Esto significa que si cambias el valor de una variable, Python no modifica el dato original, sino que crea un nuevo objeto en otra parte de la memoria y mueve la etiqueta hacia él.
Para evitar que la memoria se llene de datos que ya nadie usa, Python emplea un sistema de recolección de basura (garbage collection). El sistema lleva la cuenta de cuántas etiquetas apuntan a un objeto; cuando ese contador llega a cero, el motor de ejecución borra el dato para liberar espacio.
Dominar la asignación de datos, respetar las normas de nomenclatura de la PEP 8 y entender que las variables son etiquetas dinámicas permite escribir un código eficiente y limpio, aprovechando la gestión automática de memoria y la versatilidad de los tipos de datos nativos del lenguaje.