首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数的大小和复杂的对象之间有什么关系?

整数的大小和复杂的对象之间有什么关系?
EN

Stack Overflow用户
提问于 2015-03-12 08:46:10
回答 2查看 911关注 0票数 1

我最近听说了Python整数缓存。在网上搜索过之后,我找到了一篇写得很好的文章:http://www.laurentluce.com/posts/python-integer-objects-implementation.它解释了我想知道的关于这门学科的东西。

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

在我的机器上,我得到:

代码语言:javascript
复制
>>> x = 5
>>> type(x)
<type 'int'>
>>> sys.getsizeof(x)
12

好的。因此,Python对象有12个字节宽。

我的问题来自整数和复杂大小的比较。我在同一台机器上打字:

代码语言:javascript
复制
>>> z = 5 + 5j
>>> type(z)
<type 'complex'>
>>> sys.getsizeof(z);
24

我相信complex是一个对象。因此,作为int,每个complex对象必须存储其对象头。但是,如果一个int的头加上它的值等于12,为什么complex的头(我想和int一样大!)加上它的值(是整数大小的2倍?)等于24?

事先非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-12 08:57:11

因为complex包含两个浮点数,而不是两个整数:

代码语言:javascript
复制
>>> 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回购中

票数 1
EN

Stack Overflow用户

发布于 2015-03-12 08:58:16

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

虚文字生成一个复数,实际部分为0.0。复数被表示为一对浮点数,对它们的范围也有相同的限制。若要创建具有非零实部分的复数,请向其添加浮点数,例如(3+4j)。一些虚构文字的例子:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29005232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档