Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表实现和pympler度量_Python_List_Memory_Size - Fatal编程技术网

Python列表实现和pympler度量

Python列表实现和pympler度量,python,list,memory,size,Python,List,Memory,Size,我需要解析文件(~500 Mb)并将其部分加载到列表,我不需要整个文件 我有一种感觉,python为列表分配了更多的内存,而它包含的数据的大小是如此之大 我试图使用asizeofofpympler来估计超额杀伤力,但是它在MemoryError中失败,这对我来说很奇怪,我想如果我在内存asizeof中有一个list的话,应该只计算所有实体的大小之和,然后计算它 然后我拿了初始文件的一大块,我被asizeof显示给我的列表的大小震惊了。列表大小是文件大小的三倍 问题是如果asizeof给出的大小是

我需要解析文件(~500 Mb)并将其部分加载到
列表
,我不需要整个文件

我有一种感觉,python为
列表
分配了更多的内存,而它包含的数据的大小是如此之大

我试图使用
asizeof
of
pympler
来估计超额杀伤力,但是它在
MemoryError
中失败,这对我来说很奇怪,我想如果我在内存
asizeof
中有一个
list
的话,应该只计算所有实体的大小之和,然后计算它

然后我拿了初始文件的一大块,我被
asizeof
显示给我的列表的大小震惊了。列表大小是文件大小的三倍


问题是如果
asizeof
给出的大小是正确的,那么在python中使用list的更有效的方法是什么。当
asizeof
使用memoryerror失败时,如何检查较大列表的大小。

查看用于读取/解析文件的代码以及调用
pympler.asizeof
的方式会很有帮助

asizeof
和Pympler中的所有其他工具都在分析的流程中工作(使用Python的内省工具来导航参考图)。这意味着,在调整具有大量节点(对象)的引用图的大小时,分析开销可能会成为一个问题,尤其是在开始分析之前内存已经很紧张的情况下。在调用时,确保设置
all=False
code=False
。无论如何,请。在这种情况下,也许可以避免内存耗尽

据我所知,
asizeof
报告的大小是准确的,只要
sys.getsizeof
返回单个对象的正确大小(假设Python>=2.6)。您可以在调用asizeof时设置
align=1
,查看数字是否更符合您的预期

您还可以通过平台的工具或:


调整对象大小时,此指标应始终高于asizeof报告的内容。

什么内容列表?如果它是基于行的,只需迭代打开的文件对象,而不是加载所有行……您实际需要如何处理该文件?如果一次只需要一行,请迭代该文件。如果行较短,则会导致文件行列表比文件本身大得多,但这应该通过不立即加载大部分文件来解决。@wim,我希望我可以迭代,我需要内存中文件的数据,我认为~500Mb不是非常大的文件“我需要内存中文件的数据”-是的,但是你需要用它做什么?@user2357112,计算发生次数和共发生次数,在计算的基础上对数据做更多的处理
from pympler.process import ProcessMemoryInfo
pmi = ProcessMemoryInfo()
print ("Process virtual size [Byte]: " + str(pmi.vsz))