Python的int类型不固定字节,最小24字节(如0),小整数通常28字节,数值增大则字节数增加,因其是支持任意精度的对象,含对象头和动态分配的数值存储区。

Python 的 int 类型不固定占几个字节,它**动态变化**——最小 24 字节,常见小整数(如 1、10、100)占 28 字节,数值越大占用越多。
为什么不是固定大小?
Python 的 int 是对象,不是 C 那样的原始类型。每个 int 对象包含:
- 对象头(类型指针、引用计数等),约 24 字节(64 位 CPython 中)
- 实际数值存储区(
ob_digit数组),按需分配 - 小整数(如 0)可能被特殊优化,所以
sys.getsizeof(0)返回 24,而1开始就变成 28
怎么查具体占多少字节?
用 sys.getsizeof() 最准确:
import sys print(sys.getsizeof(0)) # 通常 24 print(sys.getsizeof(1)) # 通常 28 print(sys.getsizeof(2**30)) # 通常 32 print(sys.getsizeof(2**100)) # 40 或更大
注意:这个值是 CPython 实现的实测结果,不同版本或解释器(如 PyPy)可能略有差异。
立即学习“Python免费学习笔记(深入)”;
和 C/Java 的 int 有啥区别?
关键不在“字节”,而在设计目标:
- C 的
int通常是 4 字节(32 位),范围固定(约 -21 亿 ~ +21 亿) - Java 的
int固定 4 字节,long固定 8 字节 - Python 的
int默认支持任意精度——1000 位数字也能算,只是多占内存
小整数缓存会影响大小吗?
会,但只影响对象复用,不影响单个对象的内存布局:
- [-5, 256] 范围内的小整数在启动时预创建并复用(即
a = 10; b = 10时a is b为 True) - 但它们的
sys.getsizeof()仍和其他小整数一致(比如都是 28 字节),缓存不减少单个对象体积











