2010-08-12 13 views
14

Jak znaleźć rozmiar pamięci struktury danych Pythona? Szukam czegoś takiego:wielkość pamięci struktury danych Pythona

sizeof({1:'hello', 2:'world'}) 

To jest wspaniałe, jeśli liczy wszystko co rekurencyjnie. Ale pomaga nawet podstawowy wynik nierekurencyjny. Zasadniczo chcę uzyskać poczucie różnych opcji wdrażania, takich jak tuple v.s. list v.s. klasa pod względem wielkości pamięci. Ma to znaczenie, ponieważ planuję utworzyć miliony obiektów.

Moja aktualna platforma programistyczna to CPython 2.6.

+0

To będzie naprawdę powolny program, chyba że masz dużo pamięci. Plus rozmiar tabeli odnośników będzie dość ogromny (miliony obiektów?). Wystarczy powiedzieć –

+1

[namedtuple] (http://docs.python.org/dev/library/collections.html#namedtuple-factory-function-for-tuples-with-name-fields) jest dobrą alternatywą dla używania klas jako przestrzeń wymagana przez każdą instancję jest taka sama jak krotka. Jeśli masz wiele instancji jednej klasy, powinieneś zajrzeć do ['__slots__'] (http://docs.python.org/reference/datamodel.html#slots) –

Odpowiedz

20

Zobacz funkcję sys.getsizeof. Zgodnie z dokumentacją zwraca rozmiar obiektu w bajtach, zgodnie z metodą obiektu __sizeof__.

Jak wskazano w komentarzu jako Daniel, nie jest rekursywny; Zlicza tylko bajty zajmowane przez sam obiekt, a nie inne obiekty, do których się odnosi. This recipe for a recursive computation jest połączony z dokumentacją Pythona 3.

+0

Dzięki. To działa dla mnie! –