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?

questionAnswers(4)

yourAnswerToTheQuestion