Especialização em Sistemas com Python & POO com Type Hints • Capítulo 06


🗺️ Mapa Conceitual do Tópico

flowchart TD
    subgraph MEMORIA["Modelo de Memória CPython"]
        STACK["Stack: Variáveis Locais e Ponteiros"] -->|Aponta para| HEAP["Heap: Objetos e Listas Alocadas"]
    end
    
    HEAP --> MUT["Listas Mutáveis (list[T]) com Slicing [start:stop:step]"]
    HEAP --> IMUT["Tuplas Imutáveis (tuple[T, ...])"]
    HEAP --> MAT["Matrizes Multidimensionais (list[list[T]])"]
    
    style STACK fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
    style HEAP fill:#fff3e0,stroke:#ff9800,stroke-width:2px
    style MUT fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
    style IMUT fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
    style MAT fill:#fce4ec,stroke:#e91e63,stroke-width:2px

📊 1. Gestão de Memória no CPython (Stack vs Heap)

No CPython, todas as variáveis no Stack são ponteiros para estruturas alocadas no Heap (PyObject).

  • Mutabilidade (list): Permite adição, remoção e ordenação in-place. Modificar uma referência afeta todas as variáveis que apontam para o mesmo endereço de memória.
  • Imutabilidade (tuple): Após instanciada, sua estrutura é imutável, garantindo integridade e permitindo uso como chave de dicionário.
  • Cópia Rasa vs Cópia Profunda: list.copy() duplica a lista externa, mas compartilha elementos internos. copy.deepcopy() duplica toda a árvore recursivamente.

🔲 2. Matrizes e Estruturas Aninhadas Multidimensionais

Matrizes em Python são representadas como listas aninhadas (list[list[T]]), permitindo manipulação por coordenadas $(linha, coluna)$ e processamento de vizinhança 2D.


💻 Exemplo Prático e Tipado

"""
exemplo_06_memoria_colecoes_e_matrizes.py - Processamento Matricial 2D
"""

import copy


def criar_matriz_identidade(ordem: int) -> list[list[int]]:
    return [[1 if i == j else 0 for j in range(ordem)] for i in range(ordem)]


def detectar_hotspots_2d(grade: list[list[float]], limiar: float) -> list[tuple[int, int, float]]:
    """Localiza células que superam a temperatura de limiar em uma grade 2D."""
    hotspots = []
    for r, linha in enumerate(grade):
        for c, valor in enumerate(linha):
            if valor >= limiar:
                hotspots.append((r, c, valor))
    return hotspots


if __name__ == "__main__":
    grade_termica = [
        [22.5, 23.0, 24.1],
        [23.5, 88.5, 25.0],
        [22.0, 23.1, 92.4],
    ]

    alertas = detectar_hotspots_2d(grade_termica, limiar=80.0)
    print("Hotspots Térmicos Detectados:")
    for r, c, val in alertas:
        print(f"  * Célula [{r}, {c}] -> {val} °C (CRÍTICO)")

🔗 Recursos Pedagógicos do Capítulo 06

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

🏛️ Capítulo Anterior 📚 Sumário de Tópicos 📅 Próximo Capítulo