[python] vnitřní implementace python listu

Jan Matejka matejka na cat.cz
Pondělí Leden 8 13:34:52 CET 2007


> A není ani důvod aby byl. Každý trochu zkušený programátor by 
> určitě list neimplementoval vnitřně jako obousměrně vázaný 
> seznam, protože tím získá prakticky jenom nevýhody.

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.

> O vnitřní implementaci list napovídá to, že Python má tuple a 
> list, tedy dva objekty dělající de facto to samé (pomiňte teď 
> konstantnost tuple) a tipnul bych si tedy že spíše jde o to, 
> že list alokuje paměť pro indexy dopředu, a že se jedná o 
> obyčejné pole s empiricky vyladěnými algoritmy pro minimální 
> počet alokací a trochu plýtvající pamětí, zatímco tuple bude 
> vnitřně to samé co list, akorát alokuje paměť na indexy přesně.

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čí.

 
> Jinak už jen úvaha, že přístup přes index je pomalejší, než 
> cokoli jiného 

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

>je úchylná, protože si fakt neumím představit, 
> že by někdo implementoval pole (tj. něco s neměnnou lineární 
> řadou celočíselných
> indexů) tak, aby přístup přes indexy nebyl superrychlý. 

python list není pole neb umožňuje rychlé vkládání a přidávání a nemá tedy 
neměnnou řadu indexů

> Zvlášť když přístup k poli přes index je suverénně nejčastěji 
> vyžadovaná operace v programu a tím pádem je logické, že je 
> implmentována s ohledem na maximální rychlost.

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éž.

Jan Matějka



Další informace o konferenci Python