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
廣告