← Lumbre

Fundamentos de Programación · 1.º Alcance y mutabilidad

Portada de Alcance y mutabilidad

Alcance y mutabilidad

✦ Dos conceptos explican la mayoría de los comportamientos extraños al principio: dónde vive una variable (su alcance) y qué pasa cuando un nombre apunta a un objeto que puede cambiar (mutabilidad) · Fundamentos de Programación · Programación · en menos de 9 minutos

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

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

9 min Fundamentos de Programación · Programación 18–30 años
Más
Alcance y mutabilidad

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Fundamentos de Programación · 1.er semestre Cursos Explorar Mi cuenta Salir del modo estudio

Alcance y mutabilidad

Alcance de variables en Python y la regla LEGB
Dónde vive cada nombre y cómo Python lo busca en los niveles local y global.

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

  • Local: el interior de la función en ejecución.
  • Encerrante: funciones que contienen a otras.
  • Global y incorporado: el módulo y los nombres built-in.

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

  • Para cambiar una variable global desde una función hace falta declararlo explícitamente.
  • Sin esa declaración, una asignación crea una variable local nueva.
  • Depender de lo global enlentece y complica el rastreo de errores.

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

  • Inmutables (número, cadena, tupla): el objeto no cambia; reasignar crea uno nuevo.
  • Mutables (lista, diccionario, conjunto): se alteran en sitio, y todas las etiquetas ven el cambio.
  • La identidad del objeto cuenta, no solo su valor.

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

  • Pasar una lista a una función y modificarla afecta al original del llamante.
  • Un argumento por defecto mutable se comparte entre todas las llamadas: trampa clásica.
  • Devolver un objeto nuevo suele ser más seguro que alterar el recibido.

Cómo evitar sorpresas

  • Prefiere funciones que no dependan de variables globales.
  • Copia explícitamente cuando no quieras compartir el objeto.
  • Evita mutar argumentos: devuelve transformaciones nuevas.
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

  • Asignar dentro de una función creyendo que modificas el global, cuando en realidad creas un local.
  • Copiar una lista con un simple igual y obtener un alias que cambia a la vez.
  • Poner una lista vacía como valor por defecto y verla acumular entre llamadas.

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

Toca una tarjeta para ver la respuesta.

Clasifica cada objeto por si es mutable o inmutable.

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

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

                  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.

                  Tu texto se guarda sólo en este dispositivo.

                  Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.
                  Más sobre esta lección
                  Explora temas relacionados

                  Conceptos

                  Comentarios

                  Inicia sesión para comentar.

                  Todavía no hay comentarios. Sé la primera persona en opinar.