当前位置: 代码网 > it编程>前端脚本>Python > Python中的int32与int64区别及说明

Python中的int32与int64区别及说明

2025年10月23日 Python 我要评论
在 python 编程中,我们经常会看到类似 int32、int64 的数据类型,尤其是在使用 numpy、pandas 等科学计算库时更为常见。它们到底和 python 内置的 int 有什么区别?

在 python 编程中,我们经常会看到类似 int32int64 的数据类型,尤其是在使用 numpypandas 等科学计算库时更为常见。

  • 它们到底和 python 内置的 int 有什么区别?
  • 为什么有时候我们要用 int32,有时候又要用 int64
  • 这两者之间又是怎样的关系?

本文将从底层原理存储方式性能影响等角度梳理 int32int64 的差异与联系。

一、首先:python 的int类型是没有固定位数的

在纯 python 中,整数类型只有一个:

a = 10
print(type(a))  # <class 'int'>

python 的 int 是一种任意精度整数(arbitrary-precision integer)

也就是说,它可以根据需要自动扩展存储位数,不会像 c 或 java 那样溢出。

x = 2 ** 1000
print(x)
# python 可以轻松表示 1000 位的大整数

总结:python 自带的 int动态精度类型,没有固定的 32 位或 64 位限制。

二、int32和int64来自哪里?

它们并不是 python 内置类型,而是来自 numpy 库。

import numpy as np

a = np.int32(10)
b = np.int64(10)

print(type(a))  # <class 'numpy.int32'>
print(type(b))  # <class 'numpy.int64'>

numpy 是一个专为高性能数值计算设计的库,它引入了固定长度整数类型,以便:

  • 控制内存占用;
  • 与 c / fortran 等底层语言数据结构兼容;
  • 在矩阵、数组运算中提升性能。

三、int32 与 int64 的本质区别

特性int32int64
位宽(bit width)32 位64 位
可表示整数范围-231 ~ 231-1-263 ~ 263-1
内存占用4 字节(bytes)8 字节
常见平台默认类型windows 常见linux / macos 常见
numpy dtype 表示np.int32np.int64
是否有符号✅ 有符号整数✅ 有符号整数

示例:

import numpy as np

x = np.int32(2**31 - 1)
print(x)  # 2147483647
print(x + 1)  # 溢出 -> -2147483648

y = np.int64(2**31 - 1)
print(y + 1)  # 正常 -> 2147483648

int32 会溢出(overflow),int64 不会在同范围内溢出。

四、内存占用差异

我们可以用 nbytes 查看 numpy 对象的内存大小:

import numpy as np

a = np.int32(1)
b = np.int64(1)

print(a.nbytes)  # 4
print(b.nbytes)  # 8

数组中的差异更明显:

arr32 = np.arange(1000000, dtype=np.int32)
arr64 = np.arange(1000000, dtype=np.int64)

print(arr32.nbytes)  # 4,000,000 bytes (≈4mb)
print(arr64.nbytes)  # 8,000,000 bytes (≈8mb)

当处理大规模数组时,int32内存效率要高得多。

五、与 python 原生int的关系

numpy 的 int32int64 类型是对 c 语言原生整数类型的封装。

而 python 的 int 是一个可变长结构体对象,比固定长度的整数更灵活,但性能略低。

import numpy as np

a = np.int32(123)
b = np.int64(123)
c = 123

print(isinstance(a, int))  # false
print(isinstance(c, int))  # true

print(a + c)  # 自动转换为 np.int64

numpy 与 python 的类型会自动互相转换:

  • np.int32 与 python int 一起计算时,结果会被提升为更高精度;
  • 当存入 numpy 数组时,会自动“向下转换”为对应 dtype。

六、int32 与 int64 的兼容与类型提升(type promotion)

在 numpy 中,当不同整数类型参与运算时,会自动进行类型提升

import numpy as np

a = np.int32(10)
b = np.int64(20)
print((a + b).dtype)  # int64

规则:

小位宽类型自动提升为大位宽类型,以避免溢出和精度损失。

七、性能比较:int32 vs int64

虽然 int32 占用更少内存,但在 64 位系统上,int64 运算往往更快。

import numpy as np, time

arr32 = np.arange(1000000000, dtype=np.int32)
arr64 = np.arange(1000000000, dtype=np.int64)

t1 = time.time()
arr32.sum()
t2 = time.time()
arr64.sum()
t3 = time.time()

print("int32 sum 耗时:", t2 - t1)
print("int64 sum 耗时:", t3 - t2)

输出(典型):

int32 sum 耗时: 13.115193367004395
int64 sum 耗时: 1.120774269104004

可见 int64 时间上的耗时显著比 int32 少

结论:

  • int32 更省内存;
  • int64 在 64 位系统上通常更快(因为与 cpu 位宽对齐)。

八、不同平台下的默认整数类型

numpy 中的默认整数类型与操作系统架构有关:

系统架构默认整数类型 (np.int_)
32 位系统int32
64 位系统int64

验证:

import numpy as np
print(np.int_.__name__)  # int64 (大多数现代系统)

因此,如果不特别指定,numpy 默认使用与系统一致的位宽。

九、什么时候用int32,什么时候用int64

场景推荐类型原因
数据量大,范围有限(如 0~1e6)int32节省内存
处理大数据集或索引超 231int64避免溢出
与数据库 / c 程序交互匹配底层类型兼容性
科学计算、矩阵运算int64(默认)更安全的数值范围
gpu / tensor 计算通常使用 int32硬件支持最佳

十、补充:还有uint8、int16、uint64等类型

numpy 提供了丰富的整数类型族:

类型位宽是否有符号最小值最大值
int88-128127
uint880255
int1616-3276832767
uint1616065535
int3232-2³¹2³¹-1
int6464-2⁶³2⁶³-1

这些类型使得 numpy 能精确控制内存布局,适合图像处理、深度学习、嵌入式计算等应用场景。

十一、总结对比表

特性int32int64python 原生 int
来源numpynumpypython 内置
位宽32 位64 位动态(不限)
内存占用4 字节8 字节动态(取决于值大小)
是否溢出✅ 可能溢出✅ 可能溢出❌ 不会溢出
运算速度中等快(在 64 位系统)较慢
精度范围±2.1×109±9.2×1018理论无限
默认系统类型windows 常用linux/macos 常用通用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com