作者sbrhsieh (十年一梦)
看板Python
标题Re: [问题] 大量文字输出文字档
时间Sun Sep 15 18:18:59 2013
※ 引述《largesperm (reindeer)》之铭言:
: 请教一下
: 假设我现在要把一些结果输出为文字档
: 我先把所有的文字先 append 到空 list
: 最後才一次 "".join()
: 如果我想要输出的结果太多了
: 他会显示 MemoryError
: 可是我看 list 里面的东西也没有到非常多 大概几百万个元素
: 每一行大概就一个萤幕宽
: 我没记错的话 32bits 的 list 应该可以塞到亿个元素
: 没有出现 MemoryError 的档案大概 100 多 mb
: 出现 MemoryError 的地方不是在输出的那一刻
: 而是在 append 的时候出现
: 不晓得有什麽方式可以改善
: 谢谢
几百万个?!
这可以简单算一下,假设 list 塞一百万个 element 来说,在 32-bit Python 环境,
这个 list 本身就要用掉 4 MB(尚未算这些 element 所使用的记忆体量)。
假如你使用 Python 3,list 内的 element 是 str object,若这一百万个 str
object 都是长度为 1 的字串,那麽"至少"要用掉 2 MB or 4 MB(视 sys.maxunicode
的值而定),你说每个 element(str)长度大概是一个萤幕宽,比较保守来算为 100
字元,那就是用掉 200 or 400 MB。
在 join 那一刻,瞬间记忆体用量要再多一倍(400 or 800 MB)。
这只是以 100 万来算,假如那 list 塞到 500 万个,就会达到 2 or 4 GB。
*这些计算尚未考虑实作 str object 的 overhead。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.232.35
※ 编辑: sbrhsieh 来自: 218.173.232.35 (09/15 18:22)
1F:推 largesperm:原来如此 我刚刚检查了一下 虽然是几百万行 09/15 18:46
2F:→ largesperm:但是每行再乘上每行字数 的确会破亿 快达到 list 09/15 18:47
3F:→ largesperm:的极限 09/15 18:47