Zanurkuj w Pythonie/Tworzenie instancji klasy: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Zdzichobot (dyskusja | edycje) m poprawa nawigacji |
ort |
||
Linia 33:
# Za każdym razem, gdy funkcja <tt>leakmem</tt> jest wywoływana, zostaje utworzona instancja klasy <tt>FileInfo</tt> przypisana do zmiennej <tt>f</tt>, która jest lokalną zmienną wewnątrz funkcji. Wtedy funkcja kończy się bez jakiegokolwiek zwolnienia zmiennej <tt>f</tt>, a więc spodziewalibyśmy się wycieku pamięci, lecz tak nie będzie. Kiedy funkcja się kończy, lokalna zmienna <tt>f</tt> wychodzi poza swój zakres. W tym miejscu nie ma więcej żadnych referencji do nowej instancji <tt>FileInfo</tt>, ponieważ nigdzie nie przypisywaliśmy jej do czegoś innego niż <tt>f</tt>), tak więc Python zniszczy instancję za nas.
#
Technicznym terminem tego sposobu odśmiecania pamięci jest „zliczanie odwołań”. Python przechowuje listę referencji do każdej utworzonej instancji. W powyższym przykładzie, mamy tylko jedną referencję do instancji <tt>FileInfo</tt> -- zmienną <tt>f</tt>. Kiedy funkcja się kończy, zmienna <tt>f</tt> wychodzi poza zakres, więc licznik odwołań zmiejsza się do <tt>0</tt> i Python niszczy tę instancję automatycznie.
|