gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:48:07 24 4
gpt4 key购买 nike

我最近听说了 Python 整数缓存。在网上搜索后,我发现了这篇写得很好的文章:http://www.laurentluce.com/posts/python-integer-objects-implementation 。它解释了我想了解的有关该主题的内容。

在本文中,它解释了为什么整数对象不仅像 C 中那样只有 16 或 32 位宽。事实上,Python 需要存储对象头(因为 int Python 整数 一个对象)以及该整数的值(具有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,每个复杂对象都必须存储其对象头。但是,如果 int 的 header 加上其值等于 12,为什么 complex 的 header (与 int 大小相同,我想! ) 加上它的值(整数大小的 2 倍?)等于 24 ?

提前非常感谢!

最佳答案

因为复数包含两个 float ,而不是两个整数:

>>> 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 .

关于python - 整数和复数对象的大小之间有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com