Gibt es eine Referenz für die Speichergröße der Python-Datenstruktur auf 32- und 64-Bit-Plattformen?
Wenn nicht, wäre es schön, es auf SO zu haben. Je umfassender desto besser! Wie viele Bytes werden von den folgenden Python-Strukturen verwendet (abhängig vom len
und dem Inhaltstyp, falls relevant)?
int
float
- Referenz
str
- Unicode-Zeichenfolge
tuple
list
dict
set
array.array
numpy.array
deque
- Klassenobjekt neuen Stils
- Old-Style-Klassenobjekt
- ... und alles was ich vergesse!
(Bei Containern, die nur Verweise auf andere Objekte enthalten, möchten wir natürlich nicht die Größe des Elements selbst zählen, da es möglicherweise gemeinsam genutzt wird.)
Gibt es außerdem eine Möglichkeit, den von einem Objekt zur Laufzeit verwendeten Speicher abzurufen (rekursiv oder nicht)?
python
memory
memory-footprint
LeMiz
quelle
quelle
a
Verwenden Sie für ein NumPy-Arraya.nbytes
.Antworten:
Die Empfehlung einer früheren Frage dazu lautete, sys.getsizeof () zu verwenden und zitierte:
Sie könnten diesen Ansatz wählen:
2012-09-30
Python 2.7 (Linux, 32-Bit):
Python 3.3 (Linux, 32-Bit)
2016-08-01
OSX, Python 2.7.10 (Standard, 23. Oktober 2015, 19:19:21) [GCC 4.2.1-kompatibles Apple LLVM 7.0.0 (clang-700.0.59.5)] auf Darwin
quelle
0
,0.0
,''
undu''
für Konsistenz?Ich habe Pympler gerne für solche Aufgaben verwendet. Es ist mit vielen Versionen von Python kompatibel - insbesondere das
asizeof
Modul geht auf 2.2 zurück!Am Beispiel von hughdbrown, aber mit
from pympler import asizeof
am Anfang undprint asizeof.asizeof(v)
am Ende, sehe ich (System Python 2.5 unter MacOSX 10.5):Natürlich gibt es hier einige Annäherungen, aber ich fand es sehr nützlich für die Analyse und Optimierung des Fußabdrucks.
quelle
>>> getsizeof('a')
gibt25
und>>> getsizeof('ab')
gibt26
`Diese Antworten sammeln alle Informationen zu geringer Größe. Ich vermute, dass Besucher dieser Frage hier landen werden, um die Frage zu beantworten: "Wie groß ist dieses komplexe Objekt im Gedächtnis?"
Hier gibt es eine gute Antwort: https://goshippo.com/blog/measure-real-size-any-python-object/
Die Pointe:
So verwendet:
Wenn Sie das Speichermodell von Python genauer kennenlernen möchten, finden Sie hier einen großartigen Artikel mit einem ähnlichen Codeausschnitt in "Gesamtgröße" als Teil einer längeren Erklärung: https://code.tutsplus.com/tutorials/understand-how- Viel-Speicher-deine-Python-Objekte-verwenden - cms-25609
quelle
96
für einen Zeiger auf ein In-Memory-Cython-Objekt zurückVersuchen Sie es mit Memory Profiler. Speicherprofiler
quelle
Sie können auch das Guppy- Modul verwenden.
Und:
quelle
Man kann das
tracemalloc
Modul auch aus der Python-Standardbibliothek verwenden. Es scheint gut für Objekte zu funktionieren, deren Klasse in C implementiert ist (im Gegensatz zu Pympler zum Beispiel).quelle
Wenn Sie die
dir([object])
integrierte Funktion verwenden, können Sie__sizeof__
die integrierte Funktion abrufen.quelle