Eva Cheng

@8thEdition

Joined on Nov 26, 2021

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