Módulo “array” do Python

Aprenda, ame. Python, embora geralmente incrível, não é a linguagem mais eficiente em termos de memória. Na maioria das vezes, está tudo bem. Às vezes não é. Quando seus dados são “homogêneos” (inteiros ou caracteres), você pode usar o módulo de array para reduzir drasticamente a memória necessária para armazenar seus dados.

Dados 4096 bytes de dados (um bloco de disco típico), uma matriz exigirá ~ 4154 bytes de RAM. Os mesmos dados em uma lista exigirão mais de 32.000 bytes de RAM. Sim, fiquei igualmente chocado; use sys.getsizeof () para provar a você mesmo.

import array
import os

a
= array.array('i') # explicit element type

# you can use the sys module to get your disks block size. This pattern won't fail if you don't have a full block of data to read.

a
.fromstring(sys.stdin.buffer.read(4096))

# do something with your new array here most list methods are supported

CUIDADO: Classificar sua nova matriz irá convertê-la em uma LIST

result = a.sort()

retorna uma lista, evitando qualquer economia de memória que você teve do array. 🙁

Fonte: o próprio BDL: http://neopythonic.blogspot.com/2008/10/sorting-million-32-bit-integers-in-2mb.html