[python] Konstrukce listů a tuple

superman feed na centrum.cz
Pondělí Leden 8 15:36:55 CET 2007


Tak mi to nedalo a podíval jsem se do zdrojáků Python interpretru a list 
a tuple je vnitřně opravdu děláno jako pole a dokonce i implementační 
detaily fungují přesně tak jak jsem napsal.

List prostě alokuje prvky navíc a to tak, že buď má vnitřně tolik prvků 
0, 4, 8, 16, 25, 35, 46, 58, 72, 88, atd..

Ten vzorec, kolik prvků naalokuje interně Python vypadá takto:

# tolik by alokoval presne
alokuj_prvku = pozadovany_pocet_prvku

# pridej k tomu osminu prvku navic
alokuj_prvku = pozadovany_pocet_prvku / 8 # celociselne deleni

# a jeste neco malo navic
if pozadovany_pocet_prvku < 9:
   alokuj_prvku += 3
else:
   alokuj_prvku += 6

Jednotlivé prvky jsou pointery na hodnoty.

Tuple naopak alokuje pole pro počet prvků přesně.

Docela mě zaujal slovník, ten má zajímavě udělané hašovací struktury, 
které nemůžu rozlousknout. Respektive nechápu přesně ten jeho postup, je 
to ve zdrojácích trochu zamotané.

Ing. Miloslav Ponkrác


Další informace o konferenci Python