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