【问题标题】:What are the currently possible values for sys.maxsize?sys.maxsize 当前可能的值是多少?
【发布时间】:2018-03-12 12:01:56
【问题描述】:
在the latest Python 2 documentation:
sys.maxsize
平台支持的最大正整数
Py_ssize_t 类型,因此最大大小列表、字符串、字典和
许多其他容器可以有。
在the latest Python 3 documentation:
sys.maxsize
一个给定最大值的整数类型的变量
py_ssize_t 可以拿。在 32 位平台上通常为 2**31 - 1 并且
2**63 - 1 在 64 位平台上。
sys.maxsize 的值是在 Python 2 上使用的 in this file,其值在 Python 3 文档中指定:
- 2**31 - 1 = 2147483647;
- 2**63 - 1 = 9223372036854775807。
我的问题是:sys.maxsize 在 Python 2 中可以采用哪些可能的值?这两个是可能值的一部分吗?是否有任何其他可能的值(例如,在其他平台或操作系统上)?找到它在 Python 3 中也可以采用的可能值会很有趣。
相关问题:
【问题讨论】:
标签:
python
python-2.7
python-3.x
int
max-size
【解决方案1】:
-
sys.maxsize 告诉您一些有关用于编译 CPython 的 C 编译器的信息,因此 Python 2 和 Python 3 之间没有区别。它与所使用的 C 编译器和选项有关,而不是与正在编译的 Python 版本有关。
- 它是适合平台 C 编译器
ssize_t 类型的最大正整数。这是我见过的所有平台上的 32 位或 64 位有符号 2 的补码整数 ;-) 与您已经找到的两个特定值完全对应。
- 在文档中它被称为
type Py_ssize_t,因为 Python 必须为新的 C 概念创建自己的 typedef(在 C 级别),等待世界上所有的 C 编译器来实现它们。即使在所有已知的 C 编译器都赶上了(“不破坏,不修复”)之后,这些 Python 特定的 typedef 通常仍会保留在源代码中。
【解决方案2】:
两个可能的值是由于 python 位版本。
+=============+=====================================+======================================+
| | Python 32 bit | Python 64 bit |
+=============+=====================================+======================================+
| sys.version | 3.7.3 ….[MSC v.1916 32 bit (Intel)] | 3.7.4 …..[MSC v.1916 64 bit (AMD64)] |
+-------------+-------------------------------------+--------------------------------------+
| sys.maxsize | 2147483647 | 9223372036854770000 |
+-------------+-------------------------------------+--------------------------------------+