Medir Eficientemente o Uso de Memória de Objetos Python com sys.getsizeof()
Com sys.getsizeof() você pode verificar o uso de memória de um objeto:
import sys
mylist = range(0, 10000)
print(sys.getsizeof(mylist)) # 48
Uau… espere… por que esta lista enorme tem apenas 48 bytes?
Isso acontece porque a função range retorna um objeto iterável que apenas se comporta como uma lista de números, mas internamente apenas mantém a contagem do último número de iteração. Um range é muito mais eficiente em memória do que usar uma lista real de números.
Você pode ver por si mesmo usando uma list comprehension para criar uma lista Python real de números a partir do mesmo range:
import sys
myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist)) # 87632
São aproximadamente 87 KB para 10.000 números.
Entendendo a Diferença
O objeto range é uma sequência preguiçosa (lazy) que gera valores sob demanda, armazenando apenas os parâmetros start, stop e step. Já uma lista materializa todos os elementos na memória de uma vez.
Quando Usar Cada Um
- range(): Ideal para loops, iterações grandes e quando você não precisa de acesso aleatório ou métodos de lista.
- list(): Necessário quando você precisa modificar a sequência, acessar elementos por índice repetidamente ou usar métodos como
append(),sort(), etc.
Dica Extra: sys.getsizeof() vs. Tamanho Real
Note que sys.getsizeof() retorna apenas o tamanho do objeto em si, não incluindo objetos referenciados. Para uma análise completa de memória, considere o módulo pympler ou tracemalloc.
python
- Dominando Tipos de Dados em Python: Guia Prático
- Dominando Operadores em Python: Guia Completo
- Dominando a Declaração Pass em Python: Guia Prático
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
- Dominando a Função range() do Python: Do Básico ao Avançado
- Python time.sleep(): Como Adicionar Atrasos no Seu Código (Exemplo)
- Verificando Existência de Arquivos e Diretórios em Python – Guia Prático
- Check-up Trimestral de Saúde da Cadeia de Suprimentos: Garanta Operações Suaves
- Preparação Essencial de Equipamentos de Construção para a Primavera: Economize Tempo e Prolongue a Vida Útil