在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 对整数大小没有限制,以及他们是如何做到的(在幕后)。
过去有一个
int
类型和一个 long
类型,当值太大(或太小)而无法容纳 int
时,值会自动从 long
提升到 int
不再了。 long
使用了尽可能多的字节来保存该值,但以牺牲一些性能为代价。
然而,有可能有一个
long
,它可能是一个 int
,并且 long
值有特殊的文字语法。也就是说,0L
作为 long
为零,而 0
作为 int
为零。这些值是相等的,但仍然是不同的类型。
在Python 3中,这两种类型被统一了。只有一种类型,但其内部表示根据需要使用机器整数(32 位或 64 位,具体取决于 Python 版本)或任意长度整数(如
long
)。
在 Python 中,数据类型的大小没有像 C 或 Java 等语言那样显式定义。原因如下:
导入系统
x = 100 打印(sys.getsizeof(x))
主要是因为Python是一种解释性语言,实际上并不需要类型。在编译语言中,必须知道每个值的数据类型