为什么容器的最大尺寸有一个符号位?

问题描述 投票:2回答:1

我在Python 3.6中检查了sys.maxsize的帮助:

>>> 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 python-3.x containers size signed
1个回答
1
投票

Python 2.5中容器的最大大小从231-1增加到263-1。引入变化的PEP 353: Using ssize_t as the index typesays

为什么不size_t

实现此功能的初始尝试尝试使用size_t。很快就发现这不起作用:Python在许多地方使用负指数(表示从结尾开始计算)。即使在size_t可用的地方,在必要时也需要进行太多的代码重构,例如:在循环中像:

for(index = length-1; index >= 0; index--)

如果索引从int更改为size_t,则此循环将永不终止。

因此,限制源于决定使用特定于Python的“索引”类型,为了简化负索引的处理,可以方便地将其定义为signed(ssize_t)而不是unsigned(size_t)。

© www.soinside.com 2019 - 2024. All rights reserved.