我最近听说过Python整数缓存。在互联网上搜索之后,我发现了这篇写得很好的文章:http://www.laurentluce.com/posts/python-integer-objects-implementation。它解释了我想知道的关于这个主题的内容。
在本文中,它解释了为什么整数对象不仅是16或32位宽,如在C中。实际上,Python需要存储对象标头(因为int
Python整数是< / em>一个对象)和这个整数的值(long
C类型,根据http://en.wikipedia.org/wiki/C_data_types至少32位)。
在我的机器上,我得到:
>>> x = 5
>>> type(x)
<type 'int'>
>>> sys.getsizeof(x)
12
确定。因此,Python int
对象的宽度为12个字节。
我的问题来自整数和复杂大小之间的比较。我在同一台机器上打字:
>>> z = 5 + 5j
>>> type(z)
<type 'complex'>
>>> sys.getsizeof(z);
24
我相信complex
是一个对象。因此,作为int
,每个complex
对象必须存储其对象标头。但是,如果int
的标题加上其值等于12,为什么complex
的标题(与int
大小相同,我想!)加上其值(大小的2倍)整数?)等于24?
非常感谢提前!
答案 0 :(得分:1)
因为complex
包含两个浮点数,而不是两个整数:
>>> 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
源代码in the Python repo。
答案 1 :(得分:1)
因为复数被表示为一对浮点数:
imaginary literal产生一个复数,其实部为0.0。复数表示为一对浮点数,并且对其范围具有相同的限制。要使用非零实部创建复数,请向其添加浮点数,例如(3 + 4j)。想象文字的一些例子: