198 votes

Savoir combien de mémoire est utilisé par un objet en Python

Comment vous y prendriez-vous conclusion sur la quantité de mémoire est utilisé par un objet ? Je sais il est possible de savoir combien est utilisé par un bloc de code, mais pas par un objet instancié (n’importe quel moment au cours de sa vie), qui est ce que je veux.

110voto

Jonathan Kelsey Points 84

Essayez ceci :

appelle de l’objet méthode et ajoute une surcharge supplémentaire éboueur si l’objet est géré par le garbage collector.

103voto

fserb Points 1885

Il n'y a pas de moyen facile de trouver la taille de la mémoire d'un objet python. Parmi les problèmes que vous pourriez constater que les objets Python - comme les listes et les dicts - peut avoir des références à d'autres objets python (dans ce cas, quelle serait votre taille? La taille contenant la taille de chaque objet ou pas?). Il y a quelques conseils généraux et les structures internes liées à des types d'objet et de collecte des ordures. Enfin, certains objets python ont la non-évidence de comportements. Par exemple, des listes de réserve de l'espace pour les objets qu'ils ont, la plupart du temps; dicts sont encore plus complexes puisqu'ils peuvent fonctionner de différentes façons (ils ont une mise en œuvre différente pour le petit nombre de touches et, parfois, ils ont plus de répartir les entrées).

Il y a un gros morceau de code (et une mise à jour gros morceau de code) pour essayer de mieux approximative de la taille d'un objet python dans la mémoire. Il y a aussi certains plus simples approximations. Mais ils seront toujours des approximations.

Vous pouvez également vouloir vérifier certains vieux de description sur la PyObject (l'interne de la structure C qui représente pratiquement l'ensemble des objets python).

45voto

drevicko Points 1073

Une autre approche consiste à utiliser le cornichon. Voir cette réponse à un doublon de cette question.

4voto

jcsalterego Points 364

Je n'ai pas d'expérience personnelle avec l'un des suivants, mais une simple recherche pour "Python [mémoire] profiler" rendement:

  • PySizer, "un profileur de mémoire pour Python", à http://pysizer.8325.org/. Toutefois, la page semble indiquer que le projet n'a pas été mis à jour depuis un moment, et fait référence à...

  • Heapy, "le soutien[ing] de débogage et d'optimisation de mémoire, sur des questions liées Python programmes", à http://guppy-pe.sourceforge.net/#Heapy.

Espérons que cela aide.

3voto

rafaelvalle Points 31

Ceci doit être utilisé avec précaution car une substitution sur le sizeof d’objets peut être trompeuse.

À l’aide de la bregman.suite, quelques tests avec sys.getsizeof sortie une copie d’un objet array (données) dans une instance de l’objet comme étant plus grand que l’objet lui-même (mfcc).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X