gpt4 book ai didi

Python 内存使用 : Which of my objects is hogging the most memory?

转载 作者:太空狗 更新时间:2023-10-30 00:57:57 24 4
gpt4 key购买 nike

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

我的问题是,以下哪项正在占用我的内存?

  • 3400 万双花车?
  • 22,500 部词典的开销?
  • 1500 节课的开销?

对我来说,内存占用似乎应该是我保存在内存中的大量 float 。但是,如果到目前为止我读到的内容是正确的,那么我的每个 float 都会占用 16 个字节。由于我有 3400 万双,这应该是大约 1.08 亿字节,应该刚好超过 1 GB。

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

最佳答案

每个 float 占用 16 个字节,一个包含 1500 个条目的字典大约 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 万个指令又 float 了 GB 左右。不确定如何计算 6800 万乘以 16 仅等于 100M——您可能在某处丢了一个零。

类本身占用的数量可以忽略不计,它的 1500 个实例(当然是扣除它们所引用的对象,正如 getsizeof 为我们提供了这样的字典净数量)不多于每个都是一个很小的命令,所以,这几乎不是问题。即:

>>> sys.getsizeof(Sic)
452
>>> sys.getsizeof(Sic())
32
>>> sys.getsizeof(Sic().__dict__)
524

类为 452,所有实例为 (524 + 32) * 1550 = 862K,如您所见,当字典和 float 中的每个字节都有千兆字节时,这并不令人担心。

关于Python 内存使用 : Which of my objects is hogging the most memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com