在Python中,“sys.maxsize”是什么?

在Python中,“sys.maxsize”是什么?,python,memory,sys,max-size,Python,Memory,Sys,Max Size,我假设这个数字(2^63-1)是python可以处理或存储为变量的最大值。但这些命令似乎运行良好: >>sys.maxsize 9223372036854775807 >>> a sys.maxsize + 1 >>> a 9223372036854775808 那么有什么意义吗?如果计算分辨率允许,Python能处理任意大的数字吗 注意,以下是我版本的打印输出: >>> sys.version 3.5.2 |Anaconda custo

我假设这个数字(
2^63-1
)是python可以处理或存储为变量的最大值。但这些命令似乎运行良好:

>>sys.maxsize
9223372036854775807

>>> a sys.maxsize + 1
>>> a 
9223372036854775808
那么有什么意义吗?如果计算分辨率允许,Python能处理任意大的数字吗

注意,以下是我版本的打印输出:

>>> sys.version
3.5.2 |Anaconda custom (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]'

Python可以在计算中处理任意大的整数。任何大于64位的整数(或任何底层硬件限制)都由软件处理。因此,Python3没有
sys.maxint
常量

另一方面,sys.maxsize的值
sys.maxsize
报告平台的指针大小,并限制Python数据结构(如字符串和列表)的大小。

sys.maxsize的文档: 一个整数,给出Py_ssize_t类型变量可以接受的最大值。在32位平台上通常是2**31-1,在64位平台上通常是2**63-1


平台的Py_ssize_t类型支持的最大正整数,因此最大大小列表、字符串、dict和许多其他容器可以具有

什么是
Py\u-ssize\t
? 它是一种索引类型(用于索引事物的数字类型,如列表)。它是size_t的签名版本(来自C语言)

  • 我们不使用普通的数字/int,因为这在Python中是无界的
  • 在Python中,我们不使用
    size\t
    ,因为我们希望支持负索引,在Python中,我们可以执行
    my\u list[-4://code>。因此,
    Py\u ssize\t
    在一个范围内提供负数和正数
  • \u t
    代表类型,告知开发人员
    size\u t
    是一个类型名称,而不是一个变量
那么,对
Py\u ssize\u t
进行限制会产生什么影响呢?为什么要限制列表、字符串、dict大小?
  • 无法索引元素大于此值的列表。列表不能大于此值,因为它不接受非
    Py\u-ssize\t
  • 在字典的情况下,
    Py\u ssize\t
    用作哈希。Python在其字典实现中不使用链表,而是使用开放寻址/探测,在这种情况下,如果发现冲突,我们将使用一种系统的方法找到另一个位置来查找键并放置值。因此,在Python字典中,最多只能有
    Py\u ssize\t

在所有实际情况下(64位机器,也可能是您的机器),您都会在最大化
Py\u ssize\u t
之前耗尽内存。尝试dict.fromkeys(range(sys.maxsize+5))
从未达到这一点,它只是减慢了我的计算机速度。

“平台的Py\u-ssize\t类型支持的最大正整数,因此最大大小列表、字符串、dict和许多其他容器可以拥有。”3站点描述更为模糊。我不确定2和3是否相同。列表可以包含的最大元素数。它不是
int
可以拥有的最大值,而是基本结构可以包含的最大索引,因为在这个范围之外,它不再是可寻址的。在python中,整数可以任意大,是的。Python对于ProjectEuler非常有用。很明显,它不是无限的——如果整数本身不适合内存,你就不能这样做。它是地址寄存器的宽度:处理器可以物理引用的不同内存位置的数量。