繁体   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