我在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位,表示前导符号位。但是,容器的长度不能为负。
这是怎么回事?
答案 0 :(得分:0)
在Python 2.5中,容器的最大大小从2 31 -1增加到2 63 -1。 PEP 353: Using ssize_t as the index type,它引入了更改,says:
为什么不选择size_t
最初尝试实现此功能尝试使用size_t。它 很快就发现这行不通:Python使用负索引 在很多地方(表示从头算起)。即使在地方 size_t将在哪里可用,太多的代码重新编写在哪里 必要的,例如像这样的循环:
L1 = ['eins','zwei','drei','vier'] L2 = ['zwei','eins','vier','drei'] L3 = ['apfel','birne','banane','kirsche'] zipped = zip(L2,L3) L4 = [] for i in L1: for e,g in zipped: if e == i: L4.append(g) print L4
如果将索引从int更改为size_t,此循环将永远不会终止。
因此,限制来自于决定使用特定于Python的“索引”类型,将其定义为有符号(ssize_t)而不是无符号(size_t)以便于处理负索引很方便。 / p>