Pregunta

Esta pregunta ya tiene respuesta aquí:

¿Cómo harías para averiguar cuánta memoria utiliza un objeto?Sé que es posible saber cuánto utiliza un bloque de código, pero no un objeto instanciado (en cualquier momento de su vida), que es lo que quiero.

¿Fue útil?

Solución

No existe una manera fácil de averiguar el tamaño de la memoria de un objeto de Python..Uno de los problemas que puede encontrar es que los objetos de Python, como listas y dictados, pueden tener referencias a otros objetos de Python (en este caso, ¿cuál sería su tamaño?¿El tamaño que contiene el tamaño de cada objeto o no?).Hay algunos indicadores generales y estructuras internas relacionadas con los tipos de objetos y la recolección de basura.Finalmente, algunos objetos de Python tienen comportamientos no obvios.Por ejemplo, las listas reservan espacio para más objetos del que tienen, la mayor parte del tiempo;Los dictados son aún más complicados ya que pueden operar de diferentes maneras (tienen una implementación diferente para una pequeña cantidad de claves y, a veces, sobreasignan entradas).

Hay un gran trozo de código (y un gran fragmento de código actualizado) disponible para intentar aproximarse mejor al tamaño de un objeto de Python en la memoria.

Quizás también quieras consultar algunos antigua descripción sobre PyObject (la estructura interna de C que representa prácticamente todos los objetos de Python).

Otros consejos

Prueba esto:

sys.getsizeof(object)

obtiene tamaño de() llama al objeto __sizeof__ método y agrega una sobrecarga adicional del recolector de basura si el objeto es administrado por el recolector de basura.

Una receta recursiva

Otro método es utilizar pepinillos.Ver esta respuesta a un duplicado de esta pregunta.

No tengo ninguna experiencia personal con ninguno de los siguientes, pero una simple búsqueda de un "perfilador de [memoria] de Python" produce:

  • PySizer, "un perfilador de memoria para Python", que se encuentra en http://pysizer.8325.org/.Sin embargo, la página parece indicar que el proyecto no se ha actualizado por un tiempo y se refiere a...

  • Heapy, "admite la depuración y optimización de problemas relacionados con la memoria en programas Python", que se encuentra en http://guppy-pe.sourceforge.net/#Heapy.

Espero que ayude.

Esto debe usarse con cuidado porque una anulación de los objetos __sizeof__ podría ser engañosa.

Al utilizar bregman.suite, algunas pruebas con sys.getsizeof generan una copia de un objeto de matriz (datos) en una instancia de objeto como si fuera más grande que el objeto mismo (mfcc).

>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>

Para objetos grandes puedes usar un método algo tosco pero efectivo:verifique cuánta memoria ocupa su proceso Python en el sistema, luego elimine el objeto y compare.

Este método tiene muchos inconvenientes pero le dará una estimación muy rápida para objetos muy grandes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top