Huella de memoria de Python vs. tamaño de pila

Estoy teniendo algunos problemas de memoria mientras uso un script de Python para emitir una gransolr consulta. Estoy usando elsolrpy biblioteca para interactuar con el servidor solr. La consulta devuelve aproximadamente 80,000 registros. Inmediatamente después de emitir la consulta, la huella de memoria de python se ve a través de los globos superiores a ~ 190MB.

 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
...

En este punto, el perfil de montón visto a través de heap se ve así:

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
...

Los objetos Unicode representan los identificadores únicos de los registros de la consulta. Una cosa a tener en cuenta es que el tamaño total del montón es de solo 14 MB, mientras que Python ocupa 190 MB de memoria física. Una vez que la variable que almacena los resultados de la consulta queda fuera del alcance, el perfil de pila refleja correctamente la recolección de basura:

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

Sin embargo, la huella de memoria permanece sin cambios:

  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 qué hay una disparidad tan grande entre la huella de memoria física de python y el tamaño del montón de python?

Respuestas a la pregunta(4)

Su respuesta a la pregunta