Zanurkuj w Pythonie/Tworzenie instancji klasy: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
dr.
Beau (dyskusja | edycje)
sprzątanie kodu
Linia 42:
Technicznym terminem tego sposobu odśmiecania pamięci jest "zliczanie odwołań" ([[w:Reference counting|zobacz w Wikipedii]]). Python przechowuje listę referencji do każdej utworzonej instancji. W powyższym przykładzie, mamy tylko jedną referencję do instancji <code>FileInfo</code> -- zmienną <code>f</code>. Kiedy funkcja się kończy, zmienna <code>f</code> wychodzi poza zasięg, więc licznik odwołań zmniejsza się do <code>0</code> i Python zniszczy tę instancję automatycznie.
 
W poprzednich wersjach Pythona występowały sytuacje, gdy zliczanie odwołań zawodziło i Python nie mógł wyczyścić po nas pamięci. Jeśli tworzyliśmy dwie instancje, które odwoływały się do siebie nawzajem (np. instancja listy dwukierunkowej <ref>ang. ''double linked list''</ref>, w których każdy węzeł wskazuje na poprzedni i następny znajdujący się w liście), żadna instancja nie była niszczona automatycznie, ponieważ Python uważał (poprawnie), że ciągle mamy referencję do każdej instancji. Od Pythona 2.0 mamy dodatkowy sposób odśmiecania pamięci, nazywany po ang. ''mark-and-sweep'' (oznacz i zamiataj, [[w:Garbage collection#Mark and Sweep|zobacz w Wikipedii]]), dzięki któremu Python w sprytny sposób wykrywa różne wirtualne blokady i poprawnie czyści cykliczne odwołania.
 
Podsumowując, w języku tym można po prostu zapomnieć o zarządzaniu pamięcią i pozostawić tę sprawę Pythonowi.
Linia 54:
[[../Klasa opakowująca UserDict|Klasa opakowująca <code>UserDict</code>]]|
}}
{{Podświetl|py}}</noinclude>