我有一个大小为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的内存。你知道吗
我的存储目录在内存中的大小大约是1.5GB
。我检查了内存是否泄漏,找不到。删除这一行store_dict[hash_key] = store_line
会导致程序占用<;100MB内存。为什么这会占用这么多内存?有没有办法把这些行作为字典存储起来,而不占用那么多内存?你知道吗
即使
store_line
str
占用的内存量与磁盘上文件中相应的文本相同(它们通常不会占用相同的内存量,特别是在使用python3时,str
的默认值为Unicode,dict
也必然比文件占用更多的空间。dict
不仅包含裸文本,还包含许多Python对象。你知道吗每个
dict
键和值都是一个str
,每个键和值不仅携带文本信息,还携带自己的长度和用于垃圾收集的引用计数。dict
本身还需要存储有关其项的元数据,例如每个键的哈希和指向每个值的指针。你知道吗如果文件中有几行非常长的行,那么应该期望Python表示具有相当的内存消耗。也就是说,如果您确定该文件使用与Python相同的编码。。。你知道吗
相关问题 更多 >
编程相关推荐