主頁 > 深入Python記憶體回收機制(Garbage Collection)
Python
, CPython
, Garbage Collection
寫Python寫了好一陣子,開始對Python底層運作開始感興趣,因此最近研究了一下最多人使用的CPython的垃圾回收機制,在這邊對自己目前了解到的東西做了一下筆記。接下來將針對兩部分逐一說明。
8thEdition本文所有的程式碼執行結果皆是直接執行.py所產生,且為Python v3.10的版本,若發現結果不一致,有可能是使用互動式介面的關係喔!
主頁 > 深入Python記憶體回收機制(Garbage Collection) > 標記清除演算法(Mark and Sweep)與分代機制 引用計數的問題 上一篇已經介紹了CPython最主要的記憶體回收機制,大多數用不到的物件都可以藉由引用技術機制回收,但為什麼說是大部分而不是全部呢?那是因為一旦遇到循環引用(reference cycles)的情況,就會導致物件引用數量永不為0,造成引用計數無法進行垃圾回收,簡單舉個例子吧: import gc a = [] a.append(a) del a
Jul 4, 2022主頁 > 深入Python記憶體回收機制(Garbage Collection) > 引用計數機制(Reference Counting) 萬物皆是物件 在Python的世界中,萬物皆是物件(Object)。當我們在指定一個物件給一個變數時,變數實際上存的其實是物件的記憶體位置,而Python有提供id()這個函數讓我們獲得這個資訊。 a = 1 print(id(a)) # Output: 4328795920 事實上我們可以想像成變數就像是標籤一樣,貼在被創建的物件上,而這個物件上有幾張標籤,就是我們所說的物件的引用數量(Reference Count)。實際上引用數量就在CPython定義好的PyObject當中:
May 10, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up