[python] vnitřní implementace python listu

superman feed na centrum.cz
Pondělí Leden 8 13:53:02 CET 2007


> OK, asi jsem ovlivněn C++ terminologií z STL. Tam je list struktura, 
> která umožňuje rychlé vkládání a přidávání prvků a jako doplněk má možnost
> adresace indexem.
> Jako pole mi přijde spíš tuple.

Jenže Python je takové zmatení jazyků. Cyklus for v Pythonu je cyklus 
foreach, list je vlastně pole, atd..

> Aby vkládání do prostředka seznamu nebylo pomalé (nemusely se přesouvat
> velké bloky dat)
> asi bych to řešil jako seznam nebo strom polí. V případě potřeby vkládání
> doprostřed 
> pole se pole rozpadne na dvě části. Naopak při velké fragmentaci se spustí 
> defragmentační proces, který malá sousedící pole sloučí.

Vzhledem k tomu, že to pole udržuje jenom pointery na prvky, tak je i 
vkládání do pole extrémně rychlé. Rozhodně je to rychlejší operace, než 
udržování x fragmentovaných bloků a udržovat operace nad nimi.

Ono jde o to, že si můžete vybrat - některé operace pomalejší a některé 
rychlejší. Souvislý seznam má extrémně rychlé append, přístup přes 
indexy, čtení a zápis prvku. Zase pomalejší vkládání doprostřed seznamu.

Pokud by pole bylo na více bloků, pak je pomalý přístup přes indexy, 
pomalý zápis, pomalé čtení, rychlé vkládání doprostřed seznamu.

Vzhledme k frekvenci operací bych asi dal přednost prvnímu.

> byla řeč o enumeraci (přístup k následujícímu prvku)

oproti indexaci

> V mých progremech se indexu vyhýbám mj. proto, že se mi nelíbí.
> V C a C++ raději pro iterace seznamů používám iterátory nebo ukazatelovou
> aritmetiku 
> přijde mi to čitelnější i když se často fakticky jedná o totéž.

Iterátory v C++ je něco jiného, než v Pythonu. Iterátor je prostě objekt 
s nejrychlejším možným přístupem, často je to jenom pointer, ale díky 
šablonám to může být naprosto cokoli a dá se dosáhnout nejvyšší efektivita.

Ing. Miloslav Ponkrác


Další informace o konferenci Python