Existe-t-il une référence pour la taille de la mémoire de la structure de données Python sur les plates-formes 32 et 64 bits?
Sinon, ce serait bien de l'avoir sur SO. Plus c'est exhaustif, mieux c'est! Alors, combien d'octets sont utilisés par les structures Python suivantes (en fonction du len
et du type de contenu le cas échéant)?
int
float
- référence
str
- chaîne unicode
tuple
list
dict
set
array.array
numpy.array
deque
- objet classes de nouveau style
- objet classes à l'ancienne
- ... et tout ce que j'oublie!
(Pour les conteneurs qui ne conservent que des références à d'autres objets, nous ne voulons évidemment pas compter la taille de l'élément eux-mêmes, car il pourrait être partagé.)
De plus, y a-t-il un moyen d'obtenir la mémoire utilisée par un objet à l'exécution (récursivement ou non)?
a
, utiliseza.nbytes
.Réponses:
La recommandation d' une question précédente à ce sujet était d'utiliser sys.getsizeof () , en citant:
Vous pouvez adopter cette approche:
30/09/2012
python 2.7 (linux, 32 bits):
python 3.3 (linux, 32 bits)
01/08/2016
OSX, Python 2.7.10 (par défaut, 23 octobre 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] sur darwin
la source
0
,0.0
,''
etu''
par souci de cohérence?J'utilise volontiers pympler pour de telles tâches. Il est compatible avec de nombreuses versions de Python - le
asizeof
module en particulier remonte à 2.2!Par exemple, en utilisant l'exemple de hughdbrown mais avec
from pympler import asizeof
au début etprint asizeof.asizeof(v)
à la fin, je vois (système Python 2.5 sur MacOSX 10.5):Il y a clairement une approximation ici, mais je l'ai trouvé très utile pour l'analyse et le réglage de l'empreinte.
la source
>>> getsizeof('a')
donne25
et>>> getsizeof('ab')
donne26
`Ces réponses collectent toutes des informations de taille superficielle. Je soupçonne que les visiteurs de cette question finiront ici par chercher à répondre à la question "Quelle est la taille de cet objet complexe en mémoire?"
Il y a une excellente réponse ici: https://goshippo.com/blog/measure-real-size-any-python-object/
La punchline:
Utilisé comme ça:
Si vous voulez connaître plus en détail le modèle de mémoire de Python, il y a un excellent article ici qui contient un extrait de code similaire de «taille totale» dans le cadre d'une explication plus longue: https://code.tutsplus.com/tutorials/understand-how- beaucoup-de-mémoire-votre-utilisation-d'objets-python - cms-25609
la source
96
un pointeur vers un objet cython en mémoireEssayez le profileur de mémoire. profileur de mémoire
la source
Vous pouvez également utiliser le module guppy .
Et:
la source
On peut également utiliser le
tracemalloc
module de la bibliothèque standard Python. Cela semble bien fonctionner pour les objets dont la classe est implémentée en C (contrairement à Pympler, par exemple).la source
Lorsque vous utilisez la
dir([object])
fonction intégrée, vous pouvez obtenir la__sizeof__
fonction intégrée.la source