Perfilado de sección

      • Modelo de memoria: segmentos text, data, stack, heap
      • Referencias, identidad (id()), mutabilidad, aliasing
      • Paso de argumentos por asignación; efectos secundarios
      • Temas holísticos: memoria virtual, paginación, stack frames
    • Hasta la Semana 6 hemos escrito programas que crean variables, invocan funciones y manipulan listas, pero nunca nos preguntamos dónde viven esos datos ni cómo el sistema los organiza en la memoria física. Esa pregunta no es un capricho teórico: la comprensión del modelo de memoria es la clave para explicar por qué ciertos comportamientos de Python que parecen misteriosos —como que modificar una lista dentro de una función «se vea» fuera de ella, mientras que reasignar un entero no— son, en realidad, consecuencias directas de cómo el lenguaje gestiona las referencias a los objetos.

      Comprender el modelo de memoria permite:

      • Predecir el comportamiento de las funciones cuando reciben argumentos mutables e inmutables.
      • Diagnosticar errores sutiles causados por aliasing involuntario (dos variables que apuntan al mismo objeto).
      • Diseñar funciones con contratos claros sobre efectos secundarios.
      • Conectar el mundo del lenguaje de alto nivel con la arquitectura de Von Neumann estudiada en la Semana 1 y la pila de ejecución introducida en la Semana 4.
    • Los problemas de esta semana exploran el modelo de memoria de Python: cómo las variables referencian objetos en el heap, qué consecuencias tiene la mutabilidad sobre el aliasing y el paso de argumentos a funciones, y cómo la pila de ejecución gestiona las invocaciones de funciones — incluyendo los primeros algoritmos recursivos. El eje temático es la comprensión profunda de por qué ciertos comportamientos de Python que parecen misteriosos (modificar una lista dentro de una función afecta al exterior; reasignar un entero no) son consecuencias directas del modelo de referencias.

      Los seis problemas están organizados en tres bloques con conexiones deliberadas: los Problemas 1 y 2 exploran identidad, aliasing y mutabilidad como laboratorio de descubrimiento; los Problemas 3 y 4 formalizan el paso de argumentos y los efectos secundarios conectando con las funciones de ordenamiento de la Semana 6; y los Problemas 5 y 6 introducen la recursión vinculándola con la pila de ejecución estudiada en la Semana 4 y profundizada en la clase teórica de esta semana.

    • Presentar un ejemplo breve de código en al menos dos lenguajes (Python + uno más -C o Java) que muestre la diferencia observable. Explicar qué predice cada modelo sobre el resultado. Leer al menos dos contribuciones y comentar si el ejemplo presentado es consistente con el modelo descrito.

      Esta actividad se puede realizar en forma colaborativa. En este caso, sólo debe publicar un sólo integrante por grupo e indicar claramente quiénes lo integran.

      La actividad es obligatoria y el plazo límite para completarla, ya sea individualmente o en grupo, es el 27 de abril a las 23:59.