[PYTHON] Estimer grossièrement l'utilisation totale de la mémoire d'un objet

Environnement: Python 3.5.0, 64 bits

L'utilisation de la mémoire d'un objet peut être vérifiée avec sys.getsizeof, mais elle ne compte pas jusqu'à l'objet référencé.

>>> import sys
>>> sys.getsizeof([1, 2 ,3])
88
>>> sys.getsizeof([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
88

Si vous voulez connaître l'utilisation totale approximative de la mémoire, y compris les éléments du conteneur, il semble que vous deviez tracer tous les objets référencés et intégrer la valeur getsizeof.

référence: http://code.activestate.com/recipes/577504/

total_size.py



import sys

from itertools import chain
from collections import deque


def total_size(obj, verbose=False):
    seen = set()

    def sizeof(o):
        if id(o) in seen:
            return 0
        seen.add(id(o))
        s = sys.getsizeof(o, default=0)
        if verbose:
            print(s, type(o), repr(o))
        if isinstance(o, (tuple, list, set, frozenset, deque)):
            s += sum(map(sizeof, iter(o)))
        elif isinstance(o, dict):
            s += sum(map(sizeof, chain.from_iterable(o.items())))
        elif "__dict__" in dir(o):  #Il doit y avoir un meilleur moyen
            s += sum(map(sizeof, chain.from_iterable(o.__dict__.items())))
        return s

    return sizeof(obj)

Il semble y avoir une autre façon d'utiliser le cornichon.

Recommended Posts

Estimer grossièrement l'utilisation totale de la mémoire d'un objet
Obtenir les attributs d'un objet
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
Une introduction à l'orientation des objets - changeons l'état interne d'un objet
Comment connaître la structure interne d'un objet en Python
Touchez l'objet du réseau neuronal
L'utilisation de la mémoire de l'objet cible GC peut augmenter de 8 octets à partir de Python 3.7.4
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Gratter l'historique d'utilisation du cycle communautaire
[Python3] Réécrire l'objet code de la fonction
L'histoire de la fabrication d'un moule immuable
L'utilisation de TensorBoard a légèrement changé
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
Calculer le taux de partage de mémoire des processus Linux
Calculez le nombre total de combinaisons avec python
Visualisation de l'état d'utilisation de l'évier dans l'entreprise
Organisez l'utilisation super basique des Autotools et de pkg-config
[Blender] Comment obtenir l'ordre de sélection des sommets, des côtés et des faces d'un objet
Commande pour vérifier le nombre total de cœurs physiques / cœurs logiques / mémoire physique du processeur sur Mac