我假设这个数字(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)]'
答案 0 :(得分:8)
Python可以在计算中处理任意大的整数。在软件中处理任何大于64位(或任何基础硬件限制)的整数。因此,Python 3没有sys.maxint
常量。
另一方面,值sys.maxsize
报告平台的指针大小,这限制了Python的数据结构(如字符串和列表)的大小。
答案 1 :(得分:3)
一个整数,给出了 Py_ssize_t 类型的变量可以采用的最大值。在 32 位平台上通常是 2**31 - 1,在 64 位平台上通常是 2**63 - 1。 python3
<块引用>平台的 Py_ssize_t 类型支持的最大正整数,因此列表、字符串、字典和许多其他容器可以拥有的最大大小。 python2
Py_ssize_t
?它是一种索引类型(用于索引事物的数字类型,例如列表)。它是 size_t 的签名版本(来自 C 语言)。
size_t
,因为我们想要支持负索引,在 Python 中我们可以使用 my_list[-4:]
。所以 Py_ssize_t
提供了一个范围之间的负数和正数。_t
代表类型,用于告知开发人员 size_t
是类型名称,而不是变量。 Just a convention。Py_ssize_t
设置限制有什么影响?为什么这个限制列表、字符串、字典大小?Py_ssize_t
。Py_ssize_t
用作散列。 Python 在它的字典实现中不使用链表,它使用开放寻址/探测,如果发现冲突,我们会采用一种系统的方式去另一个地方找到键并放置值。因此,Python 中的字典不能超过 Py_ssize_t
。在所有实际情况下(64 位机器也可能是您),您将在达到 Py_ssize_t
之前耗尽内存。尝试 dict.fromkeys(range(sys.maxsize + 5))
没有成功,它只是降低了我的计算机速度。