[PYTHON] Schätzen Sie die Gesamtspeicherauslastung eines Objekts grob ab

Umgebung: Python 3.5.0, 64 Bit

Die Speichernutzung eines Objekts kann mit sys.getsizeof überprüft werden, zählt jedoch nicht bis zum referenzierten Objekt.

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

Wenn Sie die ungefähre Gesamtspeicherauslastung einschließlich der Elemente im Container wissen möchten, müssen Sie anscheinend alle referenzierten Objekte verfolgen und den Wert getsizeof integrieren.

Referenz: 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):  #Es muss einen besseren Weg geben
            s += sum(map(sizeof, chain.from_iterable(o.__dict__.items())))
        return s

    return sizeof(obj)

Es scheint einen anderen Weg zu geben, Gurke zu verwenden.

Recommended Posts

Schätzen Sie die Gesamtspeicherauslastung eines Objekts grob ab
Ruft die Attribute eines Objekts ab
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Eine Einführung in die Objektorientierung: Ändern Sie den internen Status eines Objekts
Wie Sie die interne Struktur eines Objekts in Python kennen
Berühren Sie das Objekt des neuronalen Netzes
Die Speichernutzung des GC-Zielobjekts kann ab Python 3.7.4 um 8 Byte erhöht werden
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Scraping des Nutzungsverlaufs des Community-Zyklus
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Die Geschichte einer unveränderlichen Form
Die Verwendung von TensorBoard hat sich geringfügig geändert
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
Berechnen Sie die Speicherfreigaberate von Linux-Prozessen
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Visualisierte den Nutzungsstatus der Spüle im Unternehmen
Organisieren Sie die grundlegende Verwendung von Autotools und pkg-config
[Blender] So ermitteln Sie die Auswahlreihenfolge von Scheitelpunkten, Seiten und Flächen eines Objekts
Befehl zum Überprüfen der Gesamtzahl der physischen CPU-Kerne / logischen Kerne / physischen Speicher auf dem Mac