Czy istnieje odniesienie do rozmiaru pamięci struktury danych Pythona na platformach 32- i 64-bitowych?
Jeśli nie, byłoby miło mieć go na SO. Im bardziej wyczerpujący, tym lepiej! Ile bajtów jest używanych przez następujące struktury Pythona (w zależności od len
typu zawartości i, jeśli ma to zastosowanie)?
int
float
- odniesienie
str
- ciąg znaków Unicode
tuple
list
dict
set
array.array
numpy.array
deque
- obiekt klas w nowym stylu
- obiekt klas w starym stylu
- ... i wszystko, o czym zapominam!
(W przypadku kontenerów, które przechowują tylko odniesienia do innych obiektów, oczywiście nie chcemy liczyć samego rozmiaru elementu, ponieważ może on być udostępniany).
Ponadto, czy istnieje sposób na uzyskanie pamięci używanej przez obiekt w czasie wykonywania (rekurencyjnie lub nie)?
python
memory
memory-footprint
LeMiz
źródło
źródło
a
użyja.nbytes
.Odpowiedzi:
Zaleceniem z wcześniejszego pytania było użycie sys.getsizeof () , cytując:
Możesz przyjąć takie podejście:
2012-09-30
python 2.7 (Linux, 32-bitowy):
python 3.3 (Linux, 32-bitowy)
2016-08-01
OSX, Python 2.7.10 (domyślnie, 23 października 2015, 19:19:21) [Zgodny z GCC 4.2.1 Apple LLVM 7.0.0 (clang-700.0.59.5)] na darwin
źródło
0
,0.0
,''
iu''
dla spójności?Z radością używam pymplera do takich zadań. Jest kompatybilny z wieloma wersjami Pythona -
asizeof
w szczególności moduł wraca do 2.2!Na przykład, używając przykładu hughdbrown, ale
from pympler import asizeof
na początku iprint asizeof.asizeof(v)
na końcu widzę (system Python 2.5 na MacOSX 10.5):Oczywiście jest tu pewne przybliżenie, ale uznałem je za bardzo przydatne do analizy i dostrajania śladu.
źródło
>>> getsizeof('a')
daje25
i>>> getsizeof('ab')
daje26
`Wszystkie te odpowiedzi zbierają informacje o niewielkich rozmiarach. Podejrzewam, że odwiedzający to pytanie skończą tutaj, szukając odpowiedzi na pytanie: „Jak duży jest ten złożony obiekt w pamięci?”
Tutaj jest świetna odpowiedź: https://goshippo.com/blog/measure-real-size-any-python-object/
Puenta:
Używane tak:
Jeśli chcesz dokładniej poznać model pamięci w Pythonie, znajdziesz tutaj świetny artykuł, który zawiera podobny fragment kodu „całkowity rozmiar” jako część dłuższego wyjaśnienia: https://code.tutsplus.com/tutorials/understand-how- dużo-memory-your-python-objects-use - cms-25609
źródło
96
na wskaźnik do obiektu Cython w pamięciWypróbuj profiler pamięci. profiler pamięci
źródło
Możesz także użyć modułu guppy .
I:
źródło
Można również skorzystać z
tracemalloc
modułu ze standardowej biblioteki Pythona. Wydaje się, że działa dobrze dla obiektów, których klasa jest zaimplementowana w C (w przeciwieństwie na przykład do Pymplera).źródło
Korzystając z funkcji
dir([object])
wbudowanej, można uzyskać dostęp do__sizeof__
funkcji wbudowanej.źródło