相关疑难解决方法(0)

有没有办法绕过Python list.append()随着列表的增长逐渐变慢?

我有一个大文件,我正在读取,并将每几行转换为一个对象的实例.

由于我循环遍历文件,因此我使用list.append(instance)将实例存储到列表中,然后继续循环.

这是一个约100MB左右的文件,因此它不会太大,但随着列表变大,循环逐渐减慢.(我打印循环中每圈的时间).

这不是循环所固有的〜当我循环浏览文件时打印每个新实例时,程序以恒定速度进行〜只有当我将它们附加到列表时才会变慢.

我的朋友建议在while循环之前禁用垃圾收集,然后启用它并进行垃圾收集调用.

有没有其他人观察到list.append变慢的类似问题?有没有其他方法来规避这个?


我将尝试以下两个建议.

(1)"预先分配"记忆〜这样做的最佳方法是什么?(2)尝试使用deque

多个帖子(请参阅Alex Martelli的评论)建议内存碎片化(他有像我这样的大量可用内存)〜但没有明显的性能修复.

要复制这种现象,请运行下面答案中提供的测试代码,并假设这些列表包含有用的数据.


gc.disable()和gc.enable()有助于计时.我还会仔细分析所有时间花在哪里.

python performance class list append

52
推荐指数
3
解决办法
3万
查看次数

标签 统计

append ×1

class ×1

list ×1

performance ×1

python ×1