这是来自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类型而增加?
[观察the docs,务必注意:
仅考虑直接归因于对象的内存消耗,而不考虑它所引用的对象的内存消耗。
那么,从sys.getsizeof(int(1))
的返回值大于sys.getsizeof(float(1))
的返回值,您可以推断出什么?
仅表示int
所需的内存要大于float
所需的内存。这令人惊讶吗?好吧,也许不是,如果我们期望使用int
进行的工作比使用float
做的更多。我们可以通过查看它们的属性数量来最大程度地评估“功能量”:
>>> len(dir(int))
70
>>> len(dir(float))
57