Python 中的 __del__ 魔法方法,也被稱為物件的終結者,是一個在物件即將被移除記憶體之前被呼叫的方法。它實際上並不做從記憶體中刪除物件的工作,我們將在後面看到它是如何發生的。相反,這個方法是用來做任何在物件被移除前需要發生的清理工作。例如,關閉物件在建立時開啟的任何檔案。
在本節中,我們將使用下面這個類別作為範例。
class MyNameClass: def __init__(self, name): self.name = name def __del__(self): print(f"Deleting {self.name}!")
在上面的例子中,我們已經定義了我們的類別在初始化時接受一個名字的輸入,當呼叫 finaliser 時,它會透過列印相關實例的名字讓我們知道。這樣,我們就可以了解哪些物件被從記憶體中刪除,以及何時被刪除。
那麼,CPython 什麼時候會決定從記憶體中刪除一個物件呢?有兩種方式(從CPython 3.10 開始)會發生這種情況:引用計數和垃圾回收。
引用計數
如果我們在 Python 中有一個指向某個物件的指針,那就是對該物件的引用。對於一個給定的物件 a ,CPython 會追蹤有多少其他東西指向 a 。如果這個計數器達到零,就可以安全地從記憶體中刪除這個對象,因為沒有其他東西在使用它。讓我們來看一個例子。
>>> Harward = MyNameClass("Harward") >>> del Harward Deleting Harward! >>>
在這裡,我們建立了一個新的物件(MyNamedClass("Harward")),並建立了一個指向它的指標(Harward =)。然後,當我們刪除 Harwade 時,我們刪除了這個引用,MyNamedClass 實例現在的引用計數為 0。所以,CPython 決定從記憶體中刪除它--而且,就在這之前,它的 __del__ 方法被調用,印出了我們看到的上面的資訊。
如果我們對一個物件創建了多個引用,我們將不得不擺脫所有的引用,以便使該物件被刪除。
>>> bob = MyNameClass("Bob") >>> bob_two = bob # creating a new pointer to the same object >>> del bob # this doesn't cause the object to be removed... >>> del bob_two # ... but this does Deleting Bob!
當然,我們的 MyNamedClass 實例本身可以包含指針--畢竟它們是任意的 Python 對象,我們可以為它們添加任何我們喜歡的屬性。讓我們來看一個例子。
>>> jane = MyNamedClass("Jane") >>> bob = MyNamedClass("Bob") >>> jane.friend = bob # now the "Jane" object contains a pointer to the "Bob" object... >>> bob.friend = jane
我們在上面的程式碼片段中所做的是設定了一些循環引用。名字為 Jane 的物件包含一個指向名字為 Bob 的物件的指針,反之亦然。當我們做下面的事情時,情況就變得有趣了。
>>> del jane >>> del bob
我們現在已經刪除了從命名空間到物件的指標。現在,我們完全無法存取那些 MyNameClass 物件了--但我們並沒有收到告訴我們它們即將被刪除的列印資訊。這是因為這些物件仍有引用,包含在彼此之間,因此它們的引用計數不是 0 。
我們在這裡創建的是一個循環隔離體;在這個結構中,每個物件在循環中至少有一個引用,使其保持活力,但循環中的所有物件都不能從命名空間中被訪問。
循環隔離的直覺表現
下面是我們建立一個循環隔離時的直覺表現。
首先,我們建立兩個對象,每個對像在命名空間中都有一個名字。
接下來,我們透過在每個物件上新增一個指標來連接我們的兩個物件。
最後,我們透過刪除兩個物件的原始名稱來從命名空間中刪除指標。在這一點上,這兩個物件從名字空間中是不可訪問的,但每個物件都包含一個指向另一個物件的指針,所以它們的引用計數不是零。
所以,很明顯,引用計數本身並不足以保持在執行時間的工作記憶體中沒有無用的、不可回收的物件。這就是CPython的垃圾收集器發揮作用的地方。
以上是Python 垃圾回收機制中的引用計數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

數組的同質性對性能的影響是雙重的:1)同質性允許編譯器優化內存訪問,提高性能;2)但限制了類型多樣性,可能導致效率低下。總之,選擇合適的數據結構至關重要。

到CraftCraftExecutablePythcripts,lollow TheSebestPractices:1)Addashebangline(#!/usr/usr/bin/envpython3)tomakethescriptexecutable.2)setpermissionswithchmodwithchmod xyour_script.3)

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具