为什么Python列表的内存使用量比预期的要小?

时间:2019-01-17 03:01:40

标签: python list memory

enter image description here

如图所示。 5亿条记录仅占用404M内存,为什么?由于一条记录占用83字节,因此5000万条记录应该占用3967M内存。

>>> import sys
>>> a=[]
>>> for it in range(5*10**7):a.append("miJ8ZNFG9iFqiQQohvyTWwqsij2rJCiZ7v"+str(it))
... 
>>> print(sys.getsizeof(a)/1024**2)
404.4306411743164
>>> print(sys.getsizeof("miJ8ZNFG9iFqiQQohvyTWwqsij2rJCiZ7v"))
83
>>> print(83*5*10**7/1024**2)
3957.7484130859375
>>> 

1 个答案:

答案 0 :(得分:3)

RewriteEngine On RewriteRule (^|/)folderName(/|$) - [F] 仅报告sys.getsizeof本身的成本,而不报告其内容。因此,您会看到存储list对象标头的成本,加上(略多于)50M指针;您可能使用的是64位(八字节)指针系统,因此50M指针的存储空间约为400 MB。要获取真实大小,将需要递归地为每个对象,每个对象的list(如果适用)等调用sys.getsizeof,并且由于某些对象(例如,小型__dict__)可能会共享; this is not a rabbit hole you want to go down