Capítulo 06: Gestão de Memória e Coleções: Listas, Tuplas e Matrizes Multidimensionais
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 |