📊 Capítulo 06: Memória & List Comprehensions
Especialização em Sistemas com Python
🗺️ O Modelo de Gerenciamento de Memória do CPython
flowchart TD
OBJ["Objeto no Heap (PyObject: ob_refcnt + ob_type)"]
--> RC["Reference Counting (Contagem de Referências Imediata)"]
RC --> |"ob_refcnt == 0"| FREED["Memória desalocada INSTANTANEAMENTE! ⚡"]
RC --> |"ob_refcnt > 0 (Referências Cíclicas: A aponta para B e B para A)"| GC["Cyclic Garbage Collector (gc module)"]
GC --> G0["Geração 0 (Objetos Jovens - Coleta frequente)"]
GC --> G1["Geração 1"]
GC --> G2["Geração 2 (Objetos de Vida Longa)"]
style OBJ fill:#ede7f6,stroke:#512da8,stroke-width:2px
style RC fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style FREED fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style GC fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style G0 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style G1 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style G2 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
🎯 Slide 1: List Comprehensions Poderosas
# Filtragem e transformação em uma única expressão em C:
pares_ao_quadrado = [x**2 for x in numeros if x % 2 == 0]
- Mais legíveis e significativamente mais rápidas que loops
forconvencionais com.append(), pois executam diretamente no loop C do interpretador!
🎯 Slide 2: Matrizes e Cuidado com a Multiplicação Rasa
-
❌ Erro Catastrófico:
matriz = [[0] * 3] * 3cria 3 linhas apontando para a exata mesma lista na memória! Mudar uma altera todas. - ✅ Forma Correta:
matriz = [[0 for _ in range(3)] for _ in range(3)].
🎯 Slide 3: Otimizando Memória com __slots__
- Definir
__slots__ = ('x', 'y')em classes elimina a criação do dicionário__dict__por instância, economizando até 50% de RAM ao instanciar milhões de objetos!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim