Python 什么';整数和复杂对象的大小之间的关系是什么?

Python 什么';整数和复杂对象的大小之间的关系是什么?,python,memory,sizeof,complex-numbers,Python,Memory,Sizeof,Complex Numbers,我最近听说了Python整数缓存。在网上搜索之后,我发现了这篇写得很好的文章:。它解释了我想知道的关于这个主题的事情 在本文中,它解释了为什么integer对象不像C中那样只有16或32位宽。实际上,Python需要存储对象头(因为intPython integer是一个对象)和该整数的值(使用longC类型,因此根据需要至少存储32位) 在我的机器上,我得到: >>> x = 5 >>> type(x) <type 'int'> >>

我最近听说了Python整数缓存。在网上搜索之后,我发现了这篇写得很好的文章:。它解释了我想知道的关于这个主题的事情

在本文中,它解释了为什么integer对象不像C中那样只有16或32位宽。实际上,Python需要存储对象头(因为
int
Python integer是一个对象)和该整数的值(使用
long
C类型,因此根据需要至少存储32位)

在我的机器上,我得到:

>>> x = 5
>>> type(x)
<type 'int'>
>>> sys.getsizeof(x)
12
我相信,
complex
是一个对象。因此,作为
int
,每个
complex
对象都必须存储其对象头。但是,如果
int
的头加上它的值等于12,为什么
complex
(我想与
int
大小相同!)的头加上它的值(整数大小的2倍?)等于24


非常感谢

因为复杂的
包含两个浮点,而不是两个整数:

>>> import sys
>>> z = 5 + 5j
>>> z.imag
5.0
>>> z.real
5.0
>>> sys.getsizeof(z.imag)
16
>>> sys.getsizeof(z.real)
16
>>> sys.getsizeof(z)
24

您可以看到
complexobject
源代码。

因为复数表示为一对浮点数:

一个函数产生一个实数部分为0.0的复数。复数表示为一对浮点数,并且对其范围有相同的限制。要创建具有非零实部的复数,请向其添加浮点数,例如,(3+4j)。想象文字的一些示例:


好啊并准确描述了什么是Py_复合体。我们可以看到两个real&imag字段。非常感谢@ryolait这是同一个文件的头如果不查看Python源代码,您已经找到了一个很好的答案;-)!谢谢你,卡斯拉!
>>> import sys
>>> z = 5 + 5j
>>> z.imag
5.0
>>> z.real
5.0
>>> sys.getsizeof(z.imag)
16
>>> sys.getsizeof(z.real)
16
>>> sys.getsizeof(z)
24