我最近听说了Python整数缓存。在网上搜索过之后,我找到了一篇写得很好的文章:http://www.laurentluce.com/posts/python-integer-objects-implementation.它解释了我想知道的关于这门学科的东西。
在本文中,它解释了为什么一个整数对象不像C中那样只有16或32位宽,实际上,Python需要存储对象头(因为int Python整数是一个对象)和这个整数的值( long C类型,因此根据类型至少需要32位)。
在我的机器上,我得到:
>>> x = 5
>>> type(x)
<type 'int'>
>>> sys.getsizeof(x)
12好的。因此,Python对象有12个字节宽。
我的问题来自整数和复杂大小的比较。我在同一台机器上打字:
>>> z = 5 + 5j
>>> type(z)
<type 'complex'>
>>> sys.getsizeof(z);
24我相信complex是一个对象。因此,作为int,每个complex对象必须存储其对象头。但是,如果一个int的头加上它的值等于12,为什么complex的头(我想和int一样大!)加上它的值(是整数大小的2倍?)等于24?
事先非常感谢!
发布于 2015-03-12 08:57:11
因为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源代码在Python回购中。
发布于 2015-03-12 08:58:16
因为复数被表示为一对浮点数:
虚文字生成一个复数,实际部分为0.0。复数被表示为一对浮点数,对它们的范围也有相同的限制。若要创建具有非零实部分的复数,请向其添加浮点数,例如(3+4j)。一些虚构文字的例子:
https://stackoverflow.com/questions/29005232
复制相似问题