Python基本类型(特别是int和float)的内存使用情况

问题描述 投票:6回答:1

这是来自Python 3.8.0解释器的示例(但是,在3.7.5中类似)

>>> import sys
>>> sys.getsizeof(int)
416
>>> sys.getsizeof(float)
416
>>> sys.getsizeof(list)
416
>>> sys.getsizeof(tuple)
416
>>> sys.getzieof(dict)
416
>>> sys.getsizeof(bool)
416

getsizeof()返回Python对象消耗的字节数以及垃圾回收器的开销(请参阅here)。基本的python类消耗相同数量的内存的原因是什么?

如果我们看一下这些类的实例

>>> import sys
>>> sys.getsizeof(int())
24
>>> sys.getsizeof(float())
24

默认参数为0,并且这两个实例对此参数的内存使用量相同。但是,如果我尝试添加一个参数

>>> sys.getsizeof(int(1))
28
>>> sys.getsizeof(float(1))
24

这就是奇怪的地方。为什么实例内存使用率会因int而不是float类型而增加?

python memory-management python-internals
1个回答
0
投票

[观察the docs,务必注意:

仅考虑直接归因于对象的内存消耗,而不考虑它所引用的对象的内存消耗。

那么,从sys.getsizeof(int(1))的返回值大于sys.getsizeof(float(1))的返回值,您可以推断出什么?

仅表示int所需的内存要大于float所需的内存。这令人惊讶吗?好吧,也许不是,如果我们期望使用int进行的工作比使用float做的更多。我们可以通过查看它们的属性数量来最大程度地评估“功能量”:

>>> len(dir(int))
70
>>> len(dir(float))
57
© www.soinside.com 2019 - 2024. All rights reserved.