Finn ut hvor mye minne som brukes av et objekt i Python

stemmer
153

Hvordan vil du gå om å finne ut hvor mye minne som brukes av et objekt? Jeg vet det er mulig å finne ut hvor mye som er brukt av en blokk med kode, men ikke av en instantiated objekt (når som helst i løpet av sitt liv), som er det jeg ønsker.

Publisert på 29/08/2008 klokken 04:59
kilden bruker
På andre språk...                            


6 svar

stemmer
86

Det er ingen enkel måte å finne ut minnet størrelse med en python objekt . Et av problemene du kan finne er at Python gjenstander - som lister og dicts - kan ha referanser til andre python gjenstander (i dette tilfellet, hva ville din størrelse være Størrelsen inneholder størrelsen på hvert objekt eller ikke?). Det er noen tips overhead og interne strukturer knyttet til objekttyper og søppelrydding. Til slutt, noen python objekter har ikke åpenbare atferd. For eksempel viser reserve plass til flere objekter enn de har, mesteparten av tiden; dicts er enda mer komplisert, siden de kan operere på forskjellige måter (de har en annen implementering for lite antall nøkler og noen ganger de over tildele oppføringer).

Det er en stor del av kode (og en oppdatert stor del av kode ) er det ut for å prøve å beste omtrentlige størrelse med en pytonslange objekt i minnet.

Du kan også være lurt å sjekke noen gamle beskrivelse om PyObject (intern C struct som representerer nesten alle python objekter).

Svarte 30/08/2008 kl. 03:25
kilden bruker

stemmer
72

Prøv dette:

sys.getsizeof(object)

getsizeof () kaller objektets __sizeof__metode og legger til et ekstra søppel samler overhead hvis gjenstanden er administrert av søppel kollektoren.

En rekursiv oppskrift

Svarte 08/11/2013 kl. 18:11
kilden bruker

stemmer
27

En annen tilnærming er å bruke pickle. Se dette svaret til en kopi av dette spørsmålet.

Svarte 16/10/2012 kl. 22:25
kilden bruker

stemmer
4

Jeg har ikke noen personlig erfaring med noen av følgende, men et enkelt søk etter en "Python [minne] profiler" utbytte:

  • PySizer "et minne profiler for Python," finnes på http://pysizer.8325.org/ . Men siden synes å indikere at prosjektet ikke har blitt oppdatert på en stund, og refererer til ...

  • Heapy, "support [ing] debugging og optimalisering av minne relaterte problemer i Python-programmer", finnes på http://guppy-pe.sourceforge.net/#Heapy .

Håper det hjelper.

Svarte 29/08/2008 kl. 05:33
kilden bruker

stemmer
3

Dette må brukes med forsiktighet, fordi en overstyring på objektene __sizeof__ kan være misvisende.

Ved hjelp av bregman.suite, noen tester med sys.getsizeof utgang en kopi av en matrise objekt (data) i et objekt eksempel som er større enn selve objektet (MFCC).

>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>
Svarte 03/01/2014 kl. 14:54
kilden bruker

stemmer
-2

For store gjenstander kan du bruke en litt grov, men effektiv metode: sjekk hvor mye minne Python prosess opptar i systemet, deretter slette objektet og sammenligne.

Denne metoden har mange ulemper, men det vil gi deg en veldig rask estimat for svært store gjenstander.

Svarte 30/06/2014 kl. 16:44
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more