在python中获取基本数据类型的大小

在python中获取基本数据类型的大小,python,Python,在python中使用sys.getsizeof函数时,我有很多困惑。我想知道的是,对于浮点值,系统使用4或8个字节(即C术语中的单精度或双精度) 我做了以下工作: import sys x = 0.0 sys.getsizeof(x) # Returns 24 type(x) # returns float sys.getsizeof(float) # Returns 400. 如何简单地找出浮点表示实际使用的字节数。我知道它应该是8个字节,但我如何从以下位置验证它(类似于C++中的

在python中使用
sys.getsizeof
函数时,我有很多困惑。我想知道的是,对于浮点值,系统使用4或8个字节(即C术语中的单精度或双精度)

我做了以下工作:

import sys

x = 0.0
sys.getsizeof(x)  # Returns 24

type(x) # returns float

sys.getsizeof(float)  # Returns 400.
如何简单地找出浮点表示实际使用的字节数。我知道它应该是8个字节,但我如何从以下位置验证它(类似于C++中的
sizeof
运算符)

getsizeof()调用对象的sizeof方法,如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销

sys.getsizeof
与C中的字节大小无关

对于
int
有。

正在运行

sys.getsizeof(float)
不返回任何单个浮点的大小,它返回
float
类的大小。该类包含的数据比任何单个浮点数都多,因此返回的大小也会大得多

如果您只想知道单个浮点的大小,最简单的方法就是简单地实例化一些任意浮点。例如:

sys.getsizeof(float())
注意

float()
只返回
0.0
,因此这实际上相当于:

sys.getsizeof(0.0)
在您的情况下,这将返回
24
字节(可能对大多数其他人也是如此)。在CPython(最常见的Python实现)的情况下,每个
float
对象将包含一个引用计数器和一个指向该类型的指针(指向
float
类的指针),对于64位CPython,每个指针为8字节,对于32位CPython,每个指针为4字节。剩下的字节(
24-8-8=8
在您的情况下很可能是64位CPython)将是实际浮点值本身使用的字节

但是,对于其他Python实现,这并不能保证以相同的方式工作。报告说:

它们表示机器级别的双精度浮点数。对于溢出的可接受范围和处理,您将受制于底层机器体系结构(以及C或Java实现)。Python不支持单精度浮点数;处理器和内存使用方面的节省(通常是使用它们的原因)与在Python中使用对象的开销相比相形见绌,因此没有理由使用两种浮点数使语言复杂化


我不知道有任何运行时方法可以准确地告诉您使用的字节数。但是,请注意,上面引用的语言参考确实说明Python只支持双精度浮点,因此在大多数情况下(取决于始终100%正确对您来说有多重要),它应该与C中的双精度浮点相当。

只是好奇:您为什么对这一点感兴趣?您期望什么
sys.getsizeof(float)
返回
?你为什么要检查实际班级的人数?@Chris_Rands是的,这就是我想知道的。如何检查底层表示的大小?@LutzHorn正在转换C中的一些代码,并想看看这些差异是否是由于精度问题造成的。另外,我只想知道如何做到这一点。@Luca来自文档:
今天(2000年11月)几乎所有的机器都使用IEEE-754浮点运算,几乎所有的平台都将Python浮点映射到IEEE-754“双精度”。
是,我现在明白了,但是python用什么方法来计算浮点值的大小呢?如果你看看我的问题,我试过了,它返回24…这似乎又错了。我希望是8字节或64位
import ctypes
ctypes.sizeof(ctypes.c_double)