python如何存储超出范围的整数?

python如何存储超出范围的整数?,python,memory,memory-management,Python,Memory,Memory Management,我们有一个python列表。空的时候是28号的 导入系统 a=[] 打印(sys.getsizeof(a)) 输出:28 在列表中添加一个整数元素时: 导入系统 a=[1] 打印(sys.getsizeof(a)) 打印(类型(a[0])) 输出: 32 因此,对于我添加的每个整数,列表会动态地为每个整数分配4个字节 以这种方式,列表中整数元素的最大大小应该是231-1,即2147483647 但当我使用以下代码时: 导入系统 a=[1,2,550000000000000000000000

我们有一个python列表。空的时候是28号的

导入系统 a=[] 打印(sys.getsizeof(a)) 输出:
28

在列表中添加一个整数元素时:

导入系统 a=[1] 打印(sys.getsizeof(a)) 打印(类型(a[0])) 输出:

32
因此,对于我添加的每个整数,列表会动态地为每个整数分配4个字节

以这种方式,列表中整数元素的最大大小应该是231-1,即2147483647

但当我使用以下代码时:

导入系统 a=[1,2,55000000000000000000000000000000000000000000000000000000000000] 打印(sys.getsizeof(a)) 打印(类型(a[-1])) 输出为:

44
<class 'int'>
[Finished in 0.2s
44
[完成时间为0.2秒
这个数字是5×1029,远远超出了限制。 二进制数字为:
1100011100101111000011111111110001110000001010101010110101100100000100101011010011101011010010101101111011100111111111111111111010000111010101000000000000000000000000000000000000000000000000000000000000
它有202个字符长,这意味着它需要202位。 Python仍然使用4个字节来存储它,没有任何损失

这是如何工作的?引擎盖下是否有某种压缩作用?我在官方文件中搜索过,但仍然不明白这是如何发生的

我发现:

此外,这个问题的原始灵感是:
非常感谢您的帮助/解释。谢谢。

只有整数的地址存储在列表的内存中。好的,但是单为int分配多少字节没有任何限制吗?例如,我做了
a=5000000000000000000000000000000000000000000
然后尝试获取大小。它返回40--“通常,在像C这样的低级语言中,整数的精度限制在64位,但Python实现任意精度的整数。由于Python 3,所有整数都表示为bignum,并且仅受主机系统可用内存的限制“@Shubh Khandelwal:Python内置了对任意精度数字的支持。值范围实际上只受程序可用内存量的限制。