python - 为什么容器的最大尺寸有符号位?
问题描述
我检查了sys.maxsize
Python 3.6 中的帮助:
>>> help(sys)
[...]
maxsize -- the largest supported length of containers.
测试它:
In [10]: '{:,}'.format(sys.maxsize)
Out[10]: '9,223,372,036,854,775,807'
In [11]: math.log2(sys.maxsize)
Out[11]: 63.0
它是 63 位,表示一个前导符号位。但是,容器的长度不能为负数。
这里发生了什么?
解决方案
在 Python 2.5 中,容器的最大大小从 2 31 -1 增加到 2 63 -1。PEP 353:使用 ssize_t 作为索引类型,它引入了变化,说:
为什么不 size_t
实现此功能的初始尝试尝试使用 size_t。很快发现这是行不通的:Python 在许多地方使用负索引(表示从末尾开始计数)。即使在 size_t 可以使用的地方,在必要时也需要对代码进行过多的重新表述,例如在循环中,例如:
for(index = length-1; index >= 0; index--)
如果 index 从 int 更改为 size_t,此循环将永远不会终止。
因此,限制源于决定使用 Python 特定的“索引”类型,将其定义为有符号 (ssize_t) 而不是无符号 (size_t) 以便于处理负索引。
推荐阅读
- mysql - Docker mysql 8 - 无法将 mysql 文件夹绑定到 Windows 10 文件夹。得到一个 mbind 错误
- java - Eclipse 引用 Jar 文件中的文件夹
- slim - Slim 3:如何从请求头中访问用户信息
- variables - 每次进入 gdb 时打印出局部变量
- javascript - 如何在 moz 扩展页面上执行用户脚本?
- django - 在 Uikit 中使用 django-crispy-forms
- xamarin.forms - 用于实现 ReactUI.XamForms 主详细信息页面的模式
- json - 尝试使用 Lift-JSON 从 Scala Map 生成 JSON 字符串时出现 NoSuchMethodError
- html - 从另一个页面导航到锚定链接
- python - 如何从 Bokeh Point Draw Tool 中提取数据 - 生成用于 python 的 html 表