Fundamentos de Programación · Programación

Alcance y mutabilidad

Explicar el alcance (scope) de las variables y el comportamiento de los objetos mutables frente a los inmutables en asignaciones y funciones.

Alcance y mutabilidad

Dónde vive y a qué apunta Muchos errores no están en la lógica sino en qué ve una variable y a qué apunta. El alcance decide dónde una referencia es válida; la mutabilidad decide si cambiar un nombre cambia otro.

Qué es el alcance

El alcance de una variable es la región del programa donde ese nombre existe y puede usarse. En Python, cada función abre un espacio local; lo declarado dentro solo vive ahí salvo que se declare de otro modo.

Las cuatro regiones de búsqueda

Variables locales y globales

Asignar un nombre dentro de una función lo crea local: fuera no existe y no toca una variable global del mismo nombre. Leer una variable no asignada localmente la buscará hacia fuera, lo que confunde a quien espera una asignación.

Modificar lo global

Referencias, no cajas

Una variable en Python no guarda un valor dentro de una caja: es una etiqueta pegada a un objeto. Asignar otro nombre no copia el objeto: pega una segunda etiqueta al mismo sitio.

Objetos mutables e inmutables

El alias que traiciona

Copiar una lista asignándola a otra variable no la copia: alias. Modificar una se refleja en la otra. La copia real exige crear un objeto nuevo, y esa distinción es una de las causas más tenaces de errores.

Mutabilidad y funciones

Cómo evitar sorpresas

Rectángulos anidados que representan zonas de alcance y dos etiquetas apuntando al mismo objeto
El alcance decide dónde existe un nombre; la mutabilidad decide si cambiar una etiqueta cambia el objeto compartido.

Identidad frente a igualdad

Dos listas pueden ser iguales en contenido sin ser el mismo objeto. Igualdad mira valores, identidad mira si apuntan al mismo sitio; confundirlas lleva a razonar mal sobre si una copia es realmente independiente.

Alcance en el mundo real

En un proyecto, variables mal colocadas generan efectos remotos: una función que reescribe una lista global ennegrece resultados más arriba del flujo. Mantener el estado cerca de quien lo usa hace el sistema predecible.

Errores frecuentes

Ejemplo resuelto: la trampa del argumento mutable

Una función recibe una lista, la modifica y el llamante observa que su lista original cambió. Se razona con etiquetas y objetos.

  1. Recordar que el parámetro no es una caja nueva: es una etiqueta pegada al mismo objeto.
  2. Al mutar la lista dentro (por ejemplo con append) se altera el objeto compartido.
  3. Para no tocar el original, crear dentro una copia explícita antes de modificar.
  4. O mejor aún, devolver una transformación nueva en lugar de mutar la entrada.
  5. Reservar la mutación en sitio para cuando compartir el objeto sea la intención.

¿Para qué sirve en la realidad?

Buena parte de los bugs silenciosos en análisis de datos vienen de alias no deseados: entender referencias y alcance evita que una transformación corrompa el dataset original del que dependen otros pasos.

Si dentro de una función asignas valor a un nombre que no declaraste local ni global, ese nombre:

Asignar una lista a otra variable crea una copia independiente de sus elementos.

Scope y mutación

Región donde un nombre es válido
alcance
Etiqueta pegada a un objeto
referencia
Objeto que se altera en sitio
mutable
Dos nombres, mismo objeto alterable
alias
Mismo contenido pero objetos distintos
igualdad sin identidad

Clasifica cada objeto por si es mutable o inmutable.

Mutable
Inmutable

Alcance (informática)
Contexto donde una asociación de nombre es válida.

Une cada noción con su definición:

Dónde vive y a qué apunta

# Alcance y mutabilidad
## Alcance
### local, encerrante, global, incorporado
### asignar crea local
## Referencias
### etiquetas, no cajas
### alias comparte objeto
## Mutabilidad
### inmutables no cambian
### mutables se alteran en sitio

Referencia
Vínculo que asocia un nombre con un objeto en memoria.

Una función tiene por defecto una lista vacía para ir acumulando resultados, y notas que la lista llega llena a la segunda llamada aunque sea nueva. Explica la causa apelando a la mutabilidad y al alcance.