擅长:python、mysql、java
<p><code>splitted_sentences</code>是字符串列表。列表的内存开销约为70字节,字符串的内存开销约为40字节。假设平均单词/词组为5个字节,平均句子为10个单词/词组对,则100MB文件为1M句子*10个单词*1个字符串=(1M*70)*(10*40)=28Gb内存(如果所有字符串都是唯一的)。显然,其中许多不是,但是这种内存消耗可以解释为没有内存泄漏。在</p>
<p>我解决这个问题的方法是顺序处理。我怀疑你真的需要所有这些数据同时存储在内存中。用发电机更换主回路可能会改变游戏规则:</p>
<pre><code>def sentence_gen(fname):
for sentence in open(fname, 'r'):
yield [pair.split("/", 1) for pair in sentence.strip().split()]
</code></pre>