簡體   English   中英

覆蓋變量名是否應該帶來性能優勢?

[英]Should over-writing variable names give any performance benefits?

從大型數據集中解析對象時,我經常發現自己將信息聚合到集合對象中,然后將其轉換為列表以對其進行排序。

例如,這可能是一個代碼片段:

all_times = set([])

for row in dataset:
   time = parse_out_time(row)
   all_times.add(time)

sorted_times = sorted(list(all_times))

我的問題是關於最后的任務。 我可以用排序列表重新分配相同的變量名

all_times = sorted(list(all_times))

我知道python具有自動垃圾回收功能,可刪除分配給未重用的舊變量名稱的數據。 這種方法似乎將允許Python解釋器立即取消分配屬於all_times的舊設置版本的內存。 如果我們在數百萬個數據集中循環運行上述代碼,這可能很重要。

覆蓋不再使用的變量名是否應該帶來任何性能上的好處? 還是Python的垃圾回收器足夠聰明,可以立即為腳本不再調用的變量重新分配內存?

Python不會對代碼進行任何靜態分析。 它將保持綁定到變量的對象的引用計數,直到該變量超出范圍(例如,在return ),重新分配變量( all_times = sorted(list(all_times) )或刪除該變量( del all_times )。在set的情況下,您也可以執行all_times.clear()擺脫包含的數據,所有這四種都是擺脫不再需要的容器的合理方法。

請注意,無論如何,所包含的數據仍在sorted_times 您擺脫的只是集合使用的哈希表。 無論哪種方式,它的幫助都不大。

Il認為,如果操作正確(取決於您的需求),它不會花費那么多資源。

我的意思是,如果將此代碼運行到一個循環中,您仍將僅使用2個變量。

如果將此代碼放入函數中,然后將函數運行到循環中,則情況會稍有不同。 如果您將此功能作為多線程任務運行,它將消耗更多。

暫無
暫無

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

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