我有一个 335 MB 的大文本文件。整个文本被标记化。每个标记由空格分隔。我想将每个句子表示为一个单词列表,而整个文本是一个句子列表。这意味着我将获得列表列表。
我使用这段简单的代码将文本加载到我的主内存中:
def get_tokenized_text(file_name):
tokens = list()
with open(file_name,'rt') as f:
sentences = f.readlines()
return [sent.strip().split(' ') for sent in sentences]
不幸的是,这种方法消耗了太多内存,以至于我的笔记本电脑总是死机。我有 4 GB RAM,但大约五秒钟后它就拥塞了。
为什么?文本应占用约 335 MB。即使我很慷慨而且我已经批准让我们说四倍的内存只用于管理内容,也没有内存拥塞的原因。我现在是否有任何内存泄漏?
最佳答案
列表和字符串是对象,对象具有占用内存空间的属性。您可以使用 sys.getsizeof
检查对象的大小和开销:
>>> sys.getsizeof('')
49
>>> sys.getsizeof('abcd')
53
>>> sys.getsizeof([])
64
>>> sys.getsizeof(['a'])
72
>>> sys.getsizeof(['a', 'b'])
80
关于python - 为什么作为列表的文本表示会消耗如此多的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846284/