Python 的垃圾回收


Python 的記憶體管理非常簡單。您無需擔心記憶體管理,因為記憶體分配和釋放是自動的。垃圾回收是記憶體管理機制之一。讓我們瞭解垃圾回收的不同方面:

垃圾回收

這是一個清理共享計算機記憶體的過程,該記憶體當前正在被正在執行的程式使用,而該程式不再需要該記憶體。使用垃圾回收,該釋放的記憶體可以被另一個程式使用。

Python 使用兩種方法進行記憶體管理:

  • 引用計數
  • 垃圾回收

Python 的垃圾回收是自動的,但在某些程式語言中,您必須自己清理物件。在 Python 中,如果需要,您可以手動刪除物件。

>>> x = 9
>>> print(x)
9
>>> del x
>>> print(x)
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in <module>
      print(x)
NameError: name 'x' is not defined

在上面,我們簡單地定義一個變數 (x) 並使用它。在執行時,我們刪除物件(因為 Python 中的一切都是物件)並嘗試輸出它。

在上述程式的前兩行中,物件 x 是已知的。但是,在刪除物件 (x) 之後,我們無法再列印它。

因此,從上面我們可以看出,垃圾回收是完全自動化的,我們無需擔心它。讓我們用另一個例子來理解上述概念。Python 中的每個物件,就像上面的程式碼一樣,物件 x 都有一個引用計數和一個指向型別的指標。

引用計數的值會根據我們的使用方法而變化,例如,如果我們將物件 x 分配給另一個物件 y,則其引用計數將增加到 2。

>>> some_list = [1, 2 ,3, 4, 5, 6, 7, 8, 9]
>>> #Reference count of some_list = 1
>>> other_list = some_list
>>> #Reference count = 2
>>> #This will also increases if we pass the object as an assignment
>>> list_total = sum(some_list)
>>> # If we put the object in a list, reference count will also increase
>>> list_of_list = [some_list, some_list, some_list]
>>>
>>> #Let's check the reference count of object "some_list"
>>> import sys
>>> sys.getrefcount(some_list)
6

上面是一個很好的例子,可以幫助我們理解 Python 中記憶體管理的引用計數。我們建立一個物件“some_list”(引用計數 = 1),我們將其分配給另一個物件(引用計數 = 2),我們將該物件設定為引數(引用計數 = 3),稍後我們將該物件放入列表中,其中該物件的出現次數為三次(引用計數 = 6)。之後,當我們嘗試獲取物件“some_list”的引用計數時,我們得到 6。

>>> import sys
>>> sys.getrefcount(some_list)
6
>>>
>>> del list_of_list
>>> sys.getrefcount(some_list)
3
>>> del some_list
>>> sys.getrefcount(some_list)
Traceback (most recent call last):
   File "<pyshell#17>", line 1, in <module>
      sys.getrefcount(some_list)
NameError: name 'some_list' is not defined

更新於:2019年7月30日

883 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告