如何在Python中获取浮点型的实际内存占用字节数?
如何验证Python中浮点值的实际字节占用
嘿,我完全懂你的困惑——sys.getsizeof()确实容易给人误导,因为它返回的是整个Python float对象的内存大小,而不是底层浮点数值本身的字节数!
为什么sys.getsizeof(0.0)返回24?
Python里的每个float都是一个完整的对象,除了存储8字节的双精度浮点数值外,还包含对象头信息(比如引用计数、类型指针这些用于Python内存管理的内容)。在64位系统上,这些额外开销加起来通常是16字节,再加上8字节的数值,就得到了24字节的总大小。而sys.getsizeof(float)返回的是float这个类型对象的大小,和单个数值的存储完全没关系。
几种简单验证浮点值实际占用8字节的方法
如果你想得到类似C++中sizeof(double)的结果,可以用下面这些方法:
1. 使用array模块
array模块专门用于存储同质的原始数值类型,没有Python对象的额外开销:
import array # 'd'表示双精度浮点数(对应C语言的double) float_array = array.array('d', [0.0]) print(float_array.itemsize) # 输出:8
这里的itemsize就是单个原始浮点数值占用的字节数,直接对应双精度的8字节。如果想测试单精度,可以用'f'作为类型码,itemsize会返回4。
2. 使用struct模块打包
struct模块可以把Python数值转换成C风格的字节序列,通过查看打包后的字节长度就能验证:
import struct # 'd'表示打包成双精度浮点数 packed_data = struct.pack('d', 0.0) print(len(packed_data)) # 输出:8
打包后的字节流长度就是底层浮点数值的实际大小,这里直接得到8,说明确实是双精度。
补充说明
Python的原生float类型本质上就是C语言中的double,所以标准情况下所有Python浮点值都是8字节的双精度。如果你需要单精度的浮点存储,得借助array、numpy这类库来实现,原生Python并没有对应C语言float(单精度)的类型。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

