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 通过类中一个方法获取另一个方法变量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Django Auth用户认证组件实现代码

    Django Auth用户认证组件实现代码

    这篇文章主要介绍了Django Auth用户认证组件实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python实现批量提取word文件中文本框内容

    Python实现批量提取word文件中文本框内容

    在日常的办公中,有时需要提取多个word文件中的文字框的内容,这篇文章主要为大家介绍了三种常见的方法来提取文本框的内容,希望对大家有一定的帮助
    2024-02-02
  • Python定时任务随机时间执行的实现方法

    Python定时任务随机时间执行的实现方法

    这篇文章主要介绍了Python定时任务随机时间执行的实现方法,文中给大家提到了python定时执行任务的三种方式 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Python中global关键字的用法详解

    Python中global关键字的用法详解

    Python是一种简单而强大的编程语言,提供了许多功能和语法来帮助开发人员编写高效的代码,其中一个常用的功能是使用global关键字来在函数内部访问和修改全局变量,在本文中,我们将深入探讨Python中global关键字的用法,以及使用它的一些最佳实践
    2023-12-12
  • Django使用celery异步发送短信验证码代码示例

    Django使用celery异步发送短信验证码代码示例

    这篇文章主要介绍了Django中如何使用celery异步发送短信验证码的代码示例,有需要的朋友可以借鉴参考下,希望可以对大家有所帮助
    2021-09-09
  • Python包中__init__.py文件的作用与用法实例详解

    Python包中__init__.py文件的作用与用法实例详解

    我们新建python包时常常会看到一个__init _.py文件,下面这篇文章主要给大家介绍了关于Python包中__init__.py文件的作用与用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python使用rabbitmq实现网络爬虫示例

    python使用rabbitmq实现网络爬虫示例

    这篇文章主要介绍了python使用RabbitMQ实现网络爬虫的示例,需要的朋友可以参考下
    2014-02-02
  • Python音频处理库pydub的使用教程详解

    Python音频处理库pydub的使用教程详解

    Pydub是Python音频处理库,可以对音频进行切割、合并、转换、调整音量等操作。本文将对pydub各个知识点和案例进行介绍,需要的可以参考一下
    2023-03-03
  • 从零学python系列之数据处理编程实例(一)

    从零学python系列之数据处理编程实例(一)

    本文目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容
    2014-05-05

最新评论