BLACK FRIDAY - Největší IT akce roku. Získej až 80 % kreditů navíc nebo využij slevy až 80 % na e-learning. Ale pozor, akce platí pouze do 30. 11. 2025.
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 7 - Odkazy na objekty a Garbage collector v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
Pavel Buřič :22. července 13:27

naprosto dle meho o nicem vysvetleni. zacatecnikum toto maximalne zamota hlavu

Avatar
Michaela Zahradníková:7. září 14:10

Viac mi to zamotalo hlavu, nerozumiem tomu. Je to komplikovane napísané

Avatar
Jan Kupčík
Člen
Avatar
Jan Kupčík:26. listopadu 9:43

None mohlo být vysvětleno dříve jak psal Pavel Kohl, protože byl použit v bonusovém příkladu pro 4 - 6 lekci pokud se nepletu.

Malá chyba v textu:

Zapnutí a vypnutí GC můžeme dokonce "z" kódu ovlivnit, i když to není v 99 % případů vůbec potřeba.

Avatar
DarkCoder
Člen
Avatar
DarkCoder:26. listopadu 12:11

Aplikace (resp. její vlákno) má operačním systémem přidělenou paměť v podobě tzv. zásobníku (stack). Jedná se o velmi rychlou paměť s přímým přístupem. Její velikost aplikace nemůže ovlivnit, protože prostředky jsou přidělovány operačním systémem.

Tohle platí pro C nebo C++, ale ne úplně pro Python. Python program skutečně používá stack, ale je to stack interpretu, ne stack systémového vlákna. Na tento stack se ukládají:

návratové adresy, ukazatele na rámce (frames), reference na objekty (ne objekty samotné)

Velikost stacku jde v CPythonu dokonce měnit (sys.setrecur­sionlimit()).
A u vláken také nastavením velikosti thread stacku přes threading.stac­k_size().

Všechny Python objekty (int, list, dict, instance tříd …) se ukládají na heap, který spravuje Pythonův alokátor paměti.

u = Uzivatel("Jan Novák", 28)

Heap

vytvoří se objekt Uzivatel
vytvoří se řetězec "Jan Novák"
vytvoří se integer 28

Stack

proměnná u (přesněji: lokální název „u“)
obsahuje pouze referenci (pointer) na objekt uložený na heapu

Tedy to že objekt je v paměti nadvakrát není úplně přesné. Ale z výše uvedeného lze určit jak to autor myslel.

Že stack je omezený není hlavním důvodem proč Python používá reference místo kopií. Hlavním důvodem je rychlost a šetření pamětí.

Odpovědět
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Nejnovější komentáře jsou na konci poslední stránky.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 44.