přihlásit 7835/589214

Datový model

Tato kapitola by vás měla seznámit s datovým modelem Pythonu. Datový model je popis organizace dat, v tomto případě Pythonu. Je to spíš pokročilé téma o tom, jak interpret Pythonu uvnitř funguje. Znát tyto informace není nezbytně nutné, ale mohou vám pomoci pochopit jazyk Python a jak pracuje.

Datový objekt

Python je objektově implementovaný. To znamená, že všechny data v něm jsou uložena jako objekty. Objekty jsou Pythoní abstrakce dat. Jako datové objekty jsou uloženy i základní datové entity jako čísla nebo řetězce. Tím se Python liší od řady klasických programovacích jazyků, kde tomu tak není. V souladu s von Neumannovou architekturou počítače je kód programu reprezentován také jako objekty. V důsledku tohoto jsou datové objekty například i funkce nebo třídy a můžeme s nimi zacházet jako s ostatními daty. To je ještě výjimečnější záležitost.

Poznámka: Python podporuje objektově orientované programování a tedy tvorbu objektů jako instancí tříd. Slovo objekt je tak přetíženo a má dva významy, mezi kterými je potřeba rozlišovat. Objekt jako instance třídy je zároveň datový objekt z pohledu organizace a uložení dat v Pythonu.

Každý datový objekt Pythonu má minimálně tři vlastnosti. Identitu, datový typ a hodnotu.

Identita

Identita datového objektu je jedinečný a neměnný identifikátor. To jest každý datový objekt má svůj vlastní a žádné dva objekty ho nemají shodný. Hodnota identifikátoru nelze změnit. V současné době je implementován jako adresa objektu v paměti, ale to se v budoucnu může změnit.

Identifikátor objektu lze zjistit pomocí funkce id().

>>> print id(10)
159591748

Identifikátor datového objektu představujícího číslo s hodnotou 10 je 159591748.

Na datové objekty mohou vést odkazy, kterým říkáme proměnné. Potřebujeme-li zjistit, zda dvě různé proměnné se odkazují na ten samý objekt, můžeme porovnat identifikátory objektu.

>>> print id(10) == id(10)
True
>>> print id(10) == id(20)
False

To samé lze udělat pomocí operátoru is, který přesně k tomuto účelu slouží:

>>> print 10 is 10        
True
>>> print 10 is 20
False

Zdůrazňuji, že tímto zjišťujeme, zda se jedná o jeden a ten samý datový objekt (v paměti počítače), ne jestli mají stejnou hodnotu. Na jejich hodnotě nezáleží.

Datový typ

Datový typ je rovněž neměnitelný, ale není jedinečný. Můžeme mít v paměti spoustu datových objektů stejného datového typu. Datový typ specifikuje o jaký druh dat se přesně jedná. To jest jakých hodnot může datový objekt nabývat a jaké podporuje operace. Problematika datových typů je hodně široká a věnuje se jim vlastní kapitola.

Datový typ objektu lze zjistit funkcí type().

>>> print type(10)
<type 'int'>
>>> print type(20)
<type 'int'>
>>> print type("10")
<type 'str'>

Datový typ datového objektu číslo s hodnotou 10 a 20 je int. Datový typ řetězce s hodnotou 10 je str.

Hodnota

Hodnota datového objektu jsou vlastní data objektu. Hodnoty jsou úzce svázány s datovým typem, který je obecně popisuje. Hodnota datového typu může být (v závislosti na datovém typu) měnitelná i neměnitelná. Neměnitelné jsou např. čísla, řetězce a vůbec základní datové entity. Měnitelné např. seznamy a slovníky. Některé datové objekty, které nazýváme kontejnery, místo vlastních hodnot obsahují odkazy na jiné datové objekty. To jsou například n-tice, seznamy nebo slovníky. Kontejnery mohou být měnitelné (seznam, slovník) i neměnitelné (n-tice). Neměnitelná n-tice se ale může odkazovat na měnitelný typ, jehož hodnotu lze měnit. Neměnitelnost kontejneru spočívá v tom, že ukazuje pořád na stejné datové objekty.

Vznik a zánik datových objektů

Datové objekty vznikají automaticky při práci s daty. Data mohou být uvedena ve formě literálů přímo ve zdrojovém kódu programu, nebo je můžeme během chodu programu načítat ze souboru, ze sítě, může je zadávat uživatel pomocí klávesnice a podobně. Z takto získaných dat poté můžeme v programu vytvářet nová. Cokoli s čím pracujeme se automaticky převádí na datové objekty, které jsou umístěny v paměti počítače.

Když datové objekty už nejsou potřeba, tak stejně automaticky zanikají. Tj. jsou odstraněny (vymazány) z paměti počítače. To že datové objekty již nejsou potřeba pozná interpret Pythonu podle toho, že se na ně neodkazují žádné proměnné nebo jiné datové objekty. Python rozpozná i stav, kdy se dva datové objekty odkazují navzájem na sebe, ale na ně jako skupinu se již nic neodkazuje. Automatické odstraňování datových objektů z paměti má na starost garbage collector.

Ruční odstranění datového objektu z paměti (na příkaz programátora) není možné. Programátor může pouze ovlivňovat chování garbage collectoru. To jest práce s pamětí počítače je plně v kompetenci Pythonu. Paměť počítače tak programátor v Pythonu nemá plně pod kontrolou, ale na druhou stranu ani nemůže udělat řadu nepříjemných chyb vedoucí k nečekaným pádům programů nebo bezpečnostním problémům typu buffer overflow, které se stávají programátorům v jazycích s přímou správou paměti. Garbage collector mají například i jazyky Java nebo C#, přímou správu paměti například jazyky C nebo C++.


Parse error: syntax error, unexpected T_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2