python int占几个字节

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)可能略有差异。

和 C/Java 的 int 有啥区别?

关键不在“字节”,而在设计目标:

  • C 的 int 通常是 4 字节(32 位),范围固定(约 -21 亿 ~ +21 亿)
  • Java 的 int 固定 4 字节,long 固定 8 字节
  • Python 的 int 默认支持任意精度——1000 位数字也能算,只是多占内存

小整数缓存会影响大小吗?

会,但只影响对象复用,不影响单个对象的内存布局:

  • [-5, 256] 范围内的小整数在启动时预创建并复用(即 a = 10; b = 10a is b 为 True)
  • 但它们的 sys.getsizeof() 仍和其他小整数一致(比如都是 28 字节),缓存不减少单个对象体积