Python中的int32与int64区别及说明

 更新时间:2025年10月22日 16:30:04   作者:Geoking.  
本文介绍了Python原生int为动态精度类型,无固定位宽;NumPy的int32、int64为定长整数,分别占用4字节和8字节,适用于不同内存和性能场景,在数组和科学计算中更高效

在 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 常用通用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实战之异步获取中国天气信息

    Python实战之异步获取中国天气信息

    这篇文章主要介绍了如何利用Python爬虫异步获取天气信息,用的API是中国天气网。文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试
    2022-03-03
  • 使用python快速实现不同机器间文件夹共享方式

    使用python快速实现不同机器间文件夹共享方式

    今天小编就为大家分享一篇使用python快速实现不同机器间文件夹共享方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python关于字典及遍历的常用方法

    python关于字典及遍历的常用方法

    这篇文章主要介绍了python关于字典及遍历的常用方法,字典的键可以是字符串、整数、元组或字典。字典的值也可以是字符串、整数,文章围绕主题展开更多详细的内容,需要的小伙伴可以参考一下
    2022-06-06
  • 三行Python代码提高数据处理脚本速度

    三行Python代码提高数据处理脚本速度

    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作。本文将为大家介绍如何利用Python代码让你的数据处理脚本快别人4倍,需要的可以参考一下
    2022-03-03
  • Python 迭代,for...in遍历,迭代原理与应用示例

    Python 迭代,for...in遍历,迭代原理与应用示例

    这篇文章主要介绍了Python 迭代,for...in遍历,迭代原理与应用,结合实例形式分析了Python迭代与遍历的相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-10-10
  • python如何将两张图片生成为全景图片

    python如何将两张图片生成为全景图片

    这篇文章主要为大家详细介绍了python如何将两张图片生成为全景图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 使用python进行二维码生成和识别的实现

    使用python进行二维码生成和识别的实现

    在Python中,生成和识别二维码可以使用不同的库来实现,最常用的库包括 qrcode 和 pyzbar,以下是如何使用这些库来生成和识别二维码的示例,感兴趣的小伙伴可以参考阅读下
    2024-09-09
  • python处理数据,存进hive表的方法

    python处理数据,存进hive表的方法

    今天小编就为大家分享一篇python处理数据,存进hive表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 从基础到高阶详解Python字典转换为XML的完全指南

    从基础到高阶详解Python字典转换为XML的完全指南

    在现代软件开发中,​​数据交换格式​​的选择对系统间通信至关重要,本文将全面探讨Python中字典到XML的转换技术,从基础实现到高级应用,为开发者提供完整的解决方案
    2025-09-09
  • Python实现生成随机日期字符串的方法示例

    Python实现生成随机日期字符串的方法示例

    这篇文章主要介绍了Python实现生成随机日期字符串的方法,涉及Python日期时间及随机数运算相关操作技巧,需要的朋友可以参考下
    2017-12-12

最新评论