用于int和float的64位系统中的Python内存消耗

Ram*_*Ram 6 python memory python-3.x

我正在Python 3.4上的64位系统中尝试以下代码来理解不同原始数据类型的内存消耗.

import sys
print(sys.getsizeof(45)) # prints 28
print(sys.getsizeof(45.2)) # prints 24
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么Integer占用的空间比float值多.但恰恰相反,在32位系统中

import sys
print(sys.getsizeof(45)) # prints 14
print(sys.getsizeof(45.2)) # prints 16
Run Code Online (Sandbox Code Playgroud)

整数占用的内存少于浮点数.为什么会这样?除芯片组尺寸外,它还取决于操作系统吗?

Joh*_*ooy 6

开销(PyObject_HEAD)已经加倍,但是当整数的大小从32位变为64位时,浮点数(双精度)的大小仍为64

32 bit
int:   overhead = 10 bytes, value = 4 bytes
float: overhead =  8 bytes, value = 8 bytes

64 bit
int:   overhead = 20 bytes, value = 8 bytes
float: overhead = 16 bytes, value = 8 bytes

请注意,int如果它们不适合本机数据类型,则可能大于此值