簡體   English   中英

Python del 語句

[英]Python del statement

在 Python 中對變量調用del 這是立即釋放分配的內存還是仍在等待垃圾收集器收集? 像在 Java 中一樣,顯式調用del對釋放內存的時間沒有影響。

del 語句不回收內存。 它刪除一個引用,這會減少該值的引用計數。 如果計數為零,則可以回收內存。 CPython 會立即回收內存,無需等待垃圾收集器運行。

實際上,垃圾收集器只用於回收循環結構。

正如 Waleed Khan 在他的評論中所說,Python 內存管理可以正常工作,您不必擔心。

“刪除名稱會從本地或全局名稱空間中刪除該名稱的綁定”。 不多也不少。 它對名稱指向的對象沒有任何作用,除了遞減它的 refcount,如果 refcount 不為零,即使 GC 運行時也不會收集該對象。

此外, del 語句似乎比分配 None快一點(類似於 Java 的風格將 null 分配給變量以釋放其內存......)。

比較:

import time, math

def measure_del():
        start = time.time()
        for i in range(0,int(math.pow(10,8))):
                    a = "123"
                    del a # <--- !!!
        end = time.time()
        print(end-start)

def measure_none():
        start = time.time()
        for i in range(0,int(math.pow(10,8))):
                    a = "123"
                    a = None # <--- !!!
        end = time.time()
        print(end-start)

結果(在 idle3.4 中運行):

>>> measure_del()
3.9930295944213867
>>> measure_del()
3.7402305603027344
>>> measure_del()
3.8423104286193848
>>> measure_del()
3.753770351409912
>>> measure_del()
3.7772741317749023
>>> measure_del()
3.815058946609497

>>> measure_none()
4.052351236343384
>>> measure_none()
4.130320072174072
>>> measure_none()
4.082390069961548
>>> measure_none()
4.100180625915527
>>> measure_none()
4.071730375289917
>>> measure_none()
4.136169672012329

關於刪除:有時您必須處理大型數據集,您必須計算內存密集型操作並以遞歸方式將大量數據存儲到變量中。 為了節省 RAM,當您完成整個操作時,如果您不再在遞歸循環之外使用它,您應該刪除該變量。 你可以使用命令

del varname 后跟 Python 的垃圾收集器 gc.collect()

關於速度:在具有監管要求的金融應用程序等應用程序中,速度是最重要的。 您必須確保操作速度在預期的時間范圍內完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM