¿Existe una referencia para el tamaño de la memoria de la estructura de datos de Python en plataformas de 32 y 64 bits?
De lo contrario, sería bueno tenerlo en SO. ¡Cuanto más exhaustivo, mejor! Entonces, ¿cuántos bytes utilizan las siguientes estructuras de Python (según el len
tipo de contenido y cuando sea relevante)?
int
float
- referencia
str
- cadena unicode
tuple
list
dict
set
array.array
numpy.array
deque
- objeto de clases de nuevo estilo
- objeto de clases de estilo antiguo
- ... y todo lo que me estoy olvidando!
(Para los contenedores que solo guardan referencias a otros objetos, obviamente no queremos contar el tamaño del elemento en sí, ya que podría ser compartido).
Además, ¿hay alguna forma de que un objeto utilice la memoria en tiempo de ejecución (recursivamente o no)?
python
memory
memory-footprint
LeMiz
fuente
fuente
a
, usea.nbytes
.Respuestas:
La recomendación de una pregunta anterior sobre esto fue usar sys.getsizeof () , citando:
Podrías tomar este enfoque:
2012-09-30
python 2.7 (linux, 32 bits):
python 3.3 (linux, 32 bits)
2016-08-01
OSX, Python 2.7.10 (predeterminado, 23 de octubre de 2015, 19:19:21) [GCC 4.2.1 Compatible con Apple LLVM 7.0.0 (clang-700.0.59.5)] en darwin
fuente
0
,0.0
,''
yu''
para mantener la coherencia?He estado usando pympler felizmente para tales tareas. Es compatible con muchas versiones de Python; ¡el
asizeof
módulo en particular se remonta a la 2.2!Por ejemplo, usando el ejemplo de hughdbrown pero con
from pympler import asizeof
al principio yprint asizeof.asizeof(v)
al final, veo (sistema Python 2.5 en MacOSX 10.5):Claramente hay alguna aproximación aquí, pero lo he encontrado muy útil para el análisis y ajuste de huellas.
fuente
>>> getsizeof('a')
da25
y>>> getsizeof('ab')
da26
`Todas estas respuestas recopilan información de tamaño superficial. Sospecho que los visitantes de esta pregunta terminarán aquí buscando responder a la pregunta: "¿Qué tan grande es este objeto complejo en la memoria?"
Aquí hay una gran respuesta: https://goshippo.com/blog/measure-real-size-any-python-object/
El remate:
Usado así:
Si desea conocer más profundamente el modelo de memoria de Python, hay un gran artículo aquí que tiene un fragmento de código de "tamaño total" similar como parte de una explicación más larga: https://code.tutsplus.com/tutorials/understand-how- mucha-memoria-sus-objetos-python-use - cms-25609
fuente
96
un puntero a un objeto cython en memoriaPrueba el generador de perfiles de memoria. perfilador de memoria
fuente
También puedes usar el módulo guppy .
Y:
fuente
También se puede hacer uso del
tracemalloc
módulo de la biblioteca estándar de Python. Parece funcionar bien para objetos cuya clase está implementada en C (a diferencia de Pympler, por ejemplo).fuente
Cuando utiliza la
dir([object])
función incorporada, puede obtener la__sizeof__
de la función incorporada.fuente