为什么整数在Python 3中没有大小限制?

问题描述 投票:0回答:2

在Python 3中,整数的值没有限制,如这篇文章中提到的。

这确实对

numpy
有一个有趣的副作用,根据整数值,您可能会得到一个对象或整数。

np.array(int('9'*3)).dtype
# int64

np.array(int('9'*38)).dtype
# object

np.array(2**64-1).dtype
# uint64

有人可以向我解释为什么 python 3 对整数大小没有限制,以及他们是如何做到的(在幕后)。

python python-3.x numpy
2个回答
3
投票

过去有一个

int
类型和一个
long
类型,当值太大(或太小)而无法容纳
int
时,值会自动从
long
提升到
int
不再了。
long
使用了尽可能多的字节来保存该值,但以牺牲一些性能为代价。

然而,有可能有一个

long
,它可能是一个
int
,并且
long
值有特殊的文字语法。也就是说,
0L
作为
long
为零,而
0
作为
int
为零。这些值是相等的,但仍然是不同的类型。

在Python 3中,这两种类型被统一了。只有一种类型,但其内部表示根据需要使用机器整数(32 位或 64 位,具体取决于 Python 版本)或任意长度整数(如

long
)。


0
投票

在 Python 中,数据类型的大小没有像 C 或 Java 等语言那样显式定义。原因如下:

  1. 动态类型:Python 是动态类型的,这意味着变量的类型在运行时确定。这允许您灵活地使用变量。
  2. 面向对象的本质:Python 将一切都视为对象,包括数据类型。这些对象具有管理内存分配和表示的内部结构,使您无需担心确切的大小。
  3. 任意精度整数:Python 整数没有固定的大小限制。它们可以增长以容纳任意大的数量,仅受可用内存的限制。
  4. 实现细节:数据类型的大小可能会有所不同,具体取决于 Python 的底层实现及其运行的平台。 但是,如果您需要知道内存中对象的大小,可以使用 sys.getsizeof() 函数: 蟒蛇

导入系统

x = 100 打印(sys.getsizeof(x))

主要是因为Python是一种解释性语言,实际上并不需要类型。在编译语言中,必须知道每个值的数据类型

© www.soinside.com 2019 - 2024. All rights reserved.