Pegada de memória Python vs. tamanho de heap
Estou tendo alguns problemas de memória ao usar um script python para emitir um grandesolr inquerir. Estou usando osolrpy biblioteca para interagir com o servidor solr. A consulta retorna aproximadamente 80.000 registros. Imediatamente após a emissão da consulta, a pegada de memória do python é visualizada nos balões superiores para ~ 190 MB.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 193m 189m 3272 S 0.0 11.2 0:11.31 python
...
Neste ponto, o perfil do heap, conforme visualizado por heapy, é semelhante a este:
Partition of a set of 163934 objects. Total size = 14157888 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 80472 49 7401384 52 7401384 52 unicode
1 44923 27 3315928 23 10717312 76 str
...
Os objetos unicode representam os identificadores exclusivos dos registros da consulta. Uma coisa a notar é que o tamanho total do heap é de apenas 14MB enquanto o python ocupa 190MB de memória física. Depois que a variável que armazena os resultados da consulta ficar fora do escopo, o perfil de heap refletirá corretamente a coleta de lixo:
Partition of a set of 83586 objects. Total size = 6437744 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 44928 54 3316108 52 3316108 52 str
No entanto, a pegada de memória permanece inalterada:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 195m 192m 3432 S 0.0 11.3 0:13.46 python
...
Por que existe uma disparidade tão grande entre o tamanho da memória física do python e o tamanho do heap python?