Python内存使用情况:我的哪些对象占用的内存最多?

时间:2010-06-21 16:34:30

标签: python memory-management

我编写的程序在词典中存储了大量数据。具体来说,我正在创建一个类的1588个实例,每个实例包含15个带有1500个浮点映射的字典。这个过程很快就耗尽了笔记本电脑上的2GB内存(我开始写这个类的第1000个实例交换)。

我的问题是,以下哪项耗尽了我的记忆?

  • 3400万对漂浮物?
  • 22,500个词典的开销?
  • 1500班的开销?

对我而言,内存耗尽似乎应该是我在内存中拥有的大量浮点数。但是,如果到目前为止我所读的是正确的,我的每个浮点数都需要16个字节。由于我有3400万对,这应该是大约1.08亿字节,应该只是超过一千兆字节。

这里有什么我没有考虑的事情吗?

1 个答案:

答案 0 :(得分:7)

浮点数每个占用16个字节,而一个包含1500个条目的dict约为100k:

>> sys.getsizeof(1.0)
16
>>> d = dict.fromkeys((float(i) for i in range(1500)), 2.0)
>>> sys.getsizeof(d)
98444
因此,22,500个单词全部自带2GB,6800万个浮点数大约为GB左右。不知道你如何计算6800万次16只等于100M - 你可能已经在某处掉了零。

该类本身占用的数量可以忽略不计,其中1500个实例(当然,除了他们所指的对象,就像getsizeof给出了我们这样的净值)并不比一个小的dict多得多每个,所以,这几乎不是问题。即:

>>> sys.getsizeof(Sic)
452
>>> sys.getsizeof(Sic())
32
>>> sys.getsizeof(Sic().__dict__)
524
对于所有实例,

452,(524 + 32) * 1550 = 862K,正如您所看到的那样,当您在dicts和浮点数中每个都有千兆字节时,并不担心。