Python Wiki – GAE, Django, Cython, Bottom.

Python Wiki – GAE, Django, Cython, Bottom.

fallgruva for ikke a bruke __slots__ i python 5. september 2014.

Nylig prover jeg a lage et trie-tre med python. Mine data har 3M + forskjellige ord, som spiste 2G + av minnet mitt. Det ble grovt skuffet, sa jeg sokte online pa losninger. Og jeg fant den storste forbedringen er a bruke __slots__ eiendom. Det sparer meg 50% av minnet, sa jeg synes dette er en j vlig fallgruve. Se opp, virkelig.

def __init __ (self, value = NULL):

: ivar verdi: Verdien av nokkelen som svarer til denne noden eller: const: `NULL`

hvis det ikke finnes en slik nokkel.

__slots__ = (‘verdi’, ‘barn’)

def __init __ (self, value = NULL):

Sa hva gjor __slots__ her?

Korrekt bruk av __slots__ er a lagre plass i objekter. I stedet for a ha en dynamisk dikt som tillater a legge til attributter til objekter nar som helst, er det en statisk struktur som ikke tillater tillegg etter opprettelsen. Dette sparer overhead av en dikt for hvert objekt som bruker spor. Selv om dette noen ganger er en nyttig optimalisering, ville det v re helt unodvendig hvis Python-tolken var dynamisk nok, slik at den bare ville kreve dikten nar det faktisk var tillegg til objektet.

Dessverre er det en bivirkning for slots. De endrer oppforselen til gjenstandene som har slisser pa en mate som kan misbrukes av kontrollfreaks og statisk typing. Dette er darlig, fordi kontrollfreakene skal misbruke metaklassene, og de statiske maskinene ma misbruke dekoratorer, siden i Python burde det bare v re en apenbar mate a gjore noe pa.

A gjore CPython smart nok til a handtere lagringsplass uten __slots__ er et viktig oppdrag, noe som sannsynligvis er det ikke pa listen over endringer for P3k (enna).

Legg igjen et svar.

Nylige kommentarer.

Kategorier.

Python Wiki – GAE, Django, Cython, Bunn er drevet av Django.