【发布时间】:2017-05-16 00:45:02
【问题描述】:
从大型数据集中解析对象时,我经常发现自己将信息聚合到集合对象中,然后将它们转换为列表以对它们进行排序。
例如,这里可能是一个代码 sn-p:
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 的垃圾收集器是否足够聪明,可以立即为脚本不再调用的变量释放内存?
【问题讨论】:
-
你是什么意思“不再被名字引用”?无论您是否再次通过它访问它们,它们仍然由该名称引用,直到定义该名称的范围结束。
-
@jonrsharpe 添加了一个说明,即脚本不再调用该变量
-
那么不,据我所知,没有这样的优化。如果担心持有大的、不需要的对象,你应该明确地
del不再使用的标识符(或将它们分配给其他东西,就像你目前正在做的那样)——这也有利于制作你的代码在缺乏此类优化的实现中正常工作。 -
关于 Python 中的作业,我发现 Brendan Rhodes 的 talk 非常有启发性
-
ps,afaik 你不必先列出列表来对集合进行排序
标签: python python-3.x