Jak są zarządzane zmienne i pamięć w Pythonie.
Automagicznie! Nie, naprawdę, po prostu tworzysz obiekt, a maszyna wirtualna Pythona obsługuje potrzebną pamięć i miejsce, w którym powinna zostać umieszczona w układzie pamięci.
Czy ma stos i stertę i jaki algorytm jest używany do zarządzania pamięcią?
Kiedy o CPython
tym mowa , używa prywatnej sterty do przechowywania przedmiotów. Z dokumentacji interfejsu API CPython C :
Zarządzanie pamięcią w Pythonie obejmuje prywatną stertę zawierającą wszystkie obiekty i struktury danych Pythona. Zarządzanie tą prywatną stertą jest zapewniane wewnętrznie przez menedżera pamięci Python. Menedżer pamięci Python ma różne komponenty, które zajmują się różnymi aspektami dynamicznego zarządzania pamięcią, takimi jak udostępnianie, segmentacja, wstępna alokacja lub buforowanie.
Odzyskiwanie pamięci jest głównie obsługiwane przez zliczanie referencji . Oznacza to, że maszyna wirtualna języka Python prowadzi wewnętrzny dziennik zawierający informacje o liczbie odwołań do obiektu i automatycznie usuwa go z pamięci, gdy nie ma już odwołań do niego. Ponadto istnieje mechanizm łamania odwołań cyklicznych (których zliczanie referencji nie jest w stanie obsłużyć) poprzez wykrywanie nieosiągalnych „wysp” obiektów, nieco odwrotnie niż tradycyjne algorytmy GC, które próbują znaleźć wszystkie osiągalne obiekty.
UWAGA: pamiętaj, że te informacje sąCPython
szczegółowe. Inne implementacje python, takie jakpypy
,iron python
,jython
i inni mogą różnić się od siebie i od CPython, jeśli chodzi o ich specyfikę realizacji. Aby lepiej to zrozumieć, pomocne może być zrozumienie, że istnieje różnica między semantyką (językiem) języka Python a podstawową implementacją
Biorąc pod uwagę tę wiedzę, czy istnieją jakieś zalecenia dotyczące zarządzania pamięcią w przypadku przetwarzania dużej liczby / danych?
Teraz nie mogę o tym mówić, ale jestem pewien, że NumPy (najpopularniejsza biblioteka Pythona do chrupania liczb) ma mechanizmy, które z wdziękiem obsługują zużycie pamięci.
Jeśli chcesz dowiedzieć się więcej o elementach wewnętrznych Pythona, zapoznaj się z tymi zasobami: