为什么存储为字典的文件占用的空间比文件多得多

时间:2018-02-28 17:07:43

标签: python

我有一个大小为500MB的文件,如果我将该文件的每一行存储在

等字典设置中
file = "my_file.csv"
with open(file) as f:
    for l in f:
        delimiter = ','
        line = l.split(delimiter)
        hash_key = delimiter.join(line[:4])
        store_line = delimiter.join(line[4:])
        store_dict[hash_key] = store_line

为了检查我的记忆,我通过观察htop来比较我的程序的内存使用情况,首先是上面的,然后将最后一行切换到

print(hash_key + ":" + store_line) 

这花了< 100MB内存。

我的store_dict的大小在内存中大约为1.5GB。我检查了内存泄漏,我找不到任何内容。删除此行store_dict[hash_key] = store_line会导致程序执行< 100MB的内存。为什么这会占用如此多的内存?无论如何将行存储为字典而不是占用这么多内存?

1 个答案:

答案 0 :(得分:2)

即使store_line str每个占用与磁盘上文件中相应文本相同的内存量(他们也没有,特别是如果你正在使用Python 3,其中str默认为Unicode),dict必然占用比文件更多的空间。 dict不仅包含裸文本,还包含许多Python对象。

每个dict键和值都是str,它们不仅包含文本信息,还包含自己的长度和用于垃圾收集的引用计数。 dict本身还需要存储有关其项的元数据,例如每个键的哈希值和指向每个值的指针。

如果文件中有一些非常长的行,那么您应该期望Python表示具有可比较的内存消耗。也就是说, if 你确定该文件使用与Python相同的编码...

相关问题