Espacios de nombres y ámbito de variables en Python: Entendiendo nombres, enlaces y alcances
Espacios de nombres y ámbito de variables en Python
Explore cómo funcionan los nombres, espacios de nombres y ámbitos de variables en Python, con ejemplos claros y mejores prácticas.
¿Qué es un nombre en Python?
En "El Zen de Python" (import this), la última línea dice: "¡Los espacios de nombres son una idea genial -- hagamos más de esos!" Entonces, ¿qué son estos espacios de nombres? Primero, definamos un nombre.
Un nombre, o identificador, es una etiqueta que referencia un objeto. Todo en Python es un objeto, y un nombre proporciona una forma conveniente de acceder a él.
Por ejemplo, cuando ejecutamos a = 2, el entero 2 se almacena en memoria y a se convierte en su referencia. La función integrada id() devuelve la dirección de memoria de un objeto.
# Nota: Sus valores id pueden diferir
a = 2
print('id(2) =', id(2))
print('id(a) =', id(a))
Salida
id(2) = 9302208 id(a) = 9302208
Ambos nombres apuntan al mismo objeto, así sus valores id() coinciden. Veamos qué pasa cuando reasignamos a:
# Nota: Sus valores id pueden diferir
a = 2
print('id(a) =', id(a))
a = a + 1
print('id(a) =', id(a))
print('id(3) =', id(3))
b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))
Salida
id(a) = 9302208 id(a) = 9302240 id(3) = 9302240 id(b) = 9302208 id(2) = 9302208
Cuando a = a + 1 se ejecuta, se crea un nuevo objeto 3, y a ahora lo referencia. Observe que id(a) y id(3) son idénticos. La asignación subsiguiente b = 2 simplemente enlaza b al objeto existente 2, evitando almacenamiento duplicado.

Este enlace dinámico de nombres es lo que hace Python flexible: un solo identificador puede apuntar a valores de cualquier tipo—incluyendo funciones.
def imprimirHola():
print("Hola")
a = imprimirHola
a()
Salida
Hola
El identificador a ahora referencia la función imprimirHola, que podemos invocar directamente.
¿Qué es un espacio de nombres?
Un espacio de nombres es un mapeo de nombres a objetos. Piénselo como un diccionario que contiene cada identificador que ha definido junto con su objeto asociado.
Python soporta múltiples espacios de nombres simultáneamente, cada uno aislado de los otros. El intérprete crea un espacio de nombres global conteniendo todos los nombres integrados que persiste durante la vida de la sesión. Cada módulo obtiene su propio espacio de nombres global, y cada definición de función o clase introduce un nuevo espacio de nombres local.

Ámbito de variables en Python
Mientras los espacios de nombres existen, el ámbito determina dónde se puede acceder a un nombre sin calificación.
En cualquier momento, un programa tiene al menos tres ámbitos anidados:
- El ámbito local de la función actualmente en ejecución.
- El ámbito global del módulo.
- El ámbito integrado que siempre está disponible.
Cuando un nombre se referencia dentro de una función, Python busca primero en el espacio de nombres local, luego el global, y finalmente el integrado. Si una función contiene otra función, la interna introduce un nuevo ámbito anidado.
Ejemplo: Interacción de ámbito y espacio de nombres
Considere el siguiente código:
def funcion_externa():
b = 20
def funcion_interna():
c = 30
a = 10
Aquí, a vive en el espacio de nombres global del módulo. La variable b es local a funcion_externa, y c pertenece al espacio de nombres local anidado de funcion_interna.
Dentro de funcion_interna, c es local, b es no-local, y a es global. Puede leer y escribir c, pero solo leer b y a a menos que los declare explícitamente con global o nonlocal.
Aquí hay una ilustración más concreta:
def funcion_externa():
a = 20
def funcion_interna():
a = 30
print('a =', a)
funcion_interna()
print('a =', a)
a = 10
funcion_externa()
print('a =', a)
La salida demuestra tres enlaces distintos de a:
a = 30 a = 20 a = 10
Para forzar todas las asignaciones al a global, use la palabra clave global:
def funcion_externa():
global a
a = 20
def funcion_interna():
global a
a = 30
print('a =', a)
funcion_interna()
print('a =', a)
a = 10
funcion_externa()
print('a =', a)
La salida ahora refleja un único a global:
a = 30 a = 30 a = 30
Estos ejemplos ilustran cómo las reglas de espacio de nombres y ámbito de Python gobiernan la visibilidad y mutación de variables.
python
- Palabras clave e identificadores en Python: Dominando palabras reservadas y convenciones de nomenclatura
- Sentencias, indentación y comentarios en Python: Guía clara
- Variables, constantes y literales en Python – Guía completa
- Dominando conversión y casting de tipos en Python: Guía completa
- Dominando E/S e importación de módulos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Entendiendo variables globales, locales y nonlocal en Python
- Dominando Números, Conversión de Tipos y Matemáticas en Python
- Dominando Operaciones de Directorios y Archivos en Python
- Dominando Errores y Excepciones Integradas en Python
- Obtener la Fecha y Hora Actual en Python: Guía Práctica