Existe uma referência para o tamanho da memória da estrutura de dados Python em plataformas de 32 e 64 bits?
Se não, seria bom tê-lo no SO. Quanto mais exaustivo, melhor! Então, quantos bytes são usados pelas seguintes estruturas Python (dependendo do len
e do tipo de conteúdo quando relevante)?
int
float
- referência
str
- string unicode
tuple
list
dict
set
array.array
numpy.array
deque
- objeto de classes de novo estilo
- objeto de classes de estilo antigo
- ... e tudo que estou esquecendo!
(Para contêineres que mantêm apenas referências a outros objetos, obviamente não queremos contar o tamanho do item em si, uma vez que ele pode ser compartilhado.)
Além disso, existe uma maneira de obter a memória usada por um objeto em tempo de execução (recursivamente ou não)?
python
memory
memory-footprint
LeMiz
fonte
fonte
a
, usea.nbytes
.Respostas:
A recomendação de uma pergunta anterior sobre isso era usar sys.getsizeof () , citando:
Você pode adotar esta abordagem:
30/09/2012
python 2.7 (linux, 32 bits):
python 3.3 (linux, 32 bits)
01/08/2016
OSX, Python 2.7.10 (padrão, 23 de outubro de 2015, 19:19:21) [GCC 4.2.1 compatível com Apple LLVM 7.0.0 (clang-700.0.59.5)] em darwin
fonte
0
,0.0
,''
eu''
para a consistência?Estou feliz usando pympler para essas tarefas. É compatível com muitas versões do Python - o
asizeof
módulo em particular remonta ao 2.2!Por exemplo, usando o exemplo de hughdbrown, mas com
from pympler import asizeof
no início eprint asizeof.asizeof(v)
no final, vejo (sistema Python 2.5 no MacOSX 10.5):É claro que há alguma aproximação aqui, mas eu achei muito útil para análise e ajuste de footprint.
fonte
>>> getsizeof('a')
dá25
e>>> getsizeof('ab')
dá26
`Todas essas respostas coletam informações de tamanho superficial. Suspeito que os visitantes desta pergunta acabarão aqui procurando responder à pergunta: "Qual o tamanho deste objeto complexo na memória?"
Há uma ótima resposta aqui: https://goshippo.com/blog/measure-real-size-any-python-object/
A piada:
Usado assim:
Se você quiser conhecer o modelo de memória do Python mais profundamente, há um ótimo artigo aqui que tem um trecho de código de "tamanho total" semelhante como parte de uma explicação mais longa: https://code.tutsplus.com/tutorials/understand-how- much-memory-your-python-objects-use - cms-25609
fonte
96
para um ponteiro para um objeto cíton na memóriaExperimente o criador de perfil de memória. perfilador de memória
fonte
Você também pode usar o módulo guppy .
E:
fonte
Também é possível usar o
tracemalloc
módulo da biblioteca padrão Python. Parece funcionar bem para objetos cuja classe é implementada em C (ao contrário de Pympler, por exemplo).fonte
Ao usar a
dir([object])
função integrada, você pode obter o__sizeof__
da função integrada.fonte