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

Wil*_*uck 5 python memory-management

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

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

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

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

有没有我在这里没有考虑的事情?

Ale*_*lli 7

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

>> sys.getsizeof(1.0)
16
>>> d = dict.fromkeys((float(i) for i in range(1500)), 2.0)
>>> sys.getsizeof(d)
98444
Run Code Online (Sandbox Code Playgroud)

所以这22,500个单据本身就占用了2GB,另外6800万个浮点数大约是GB左右.不知道你如何计算6800万次16只相当于100M - 你可能已经在某处掉了零.

该类本身占用的数量可以忽略不计,其中1500个实例(当然,它们所指的对象的净额,就像getsizeof我们给出的这些数据的净额一样)不过是一个小的dict,所以,这几乎不是问题.即:

>>> sys.getsizeof(Sic)
452
>>> sys.getsizeof(Sic())
32
>>> sys.getsizeof(Sic().__dict__)
524
Run Code Online (Sandbox Code Playgroud)

(524 + 32) * 1550对于所有实例,452用于该类,= 862K,因为您看到,当您在dicts和浮点数中各有千兆字节时,并不担心.