Python、len和int的大小

Python、len和int的大小,python,int,Python,Int,因此,当某物的长度接近1时,cPython(2.4)有一些有趣的行为。cPython假设列表适合内存。这扩展到行为类似于列表的对象,例如xrange。本质上,len函数期望len方法返回可转换为大小的内容,如果逻辑元素的数量太大,即使这些元素实际上不存在于内存中,也不会发生这种情况。您会发现 xrange(1 << 31 - 1) xrange(1)感谢您解释为什么len特别是这样。cPython len期望size\u t。小问题:仅仅因为长度对于size\u t来说太大并不意味

因此,当某物的长度接近1时,cPython(2.4)有一些有趣的行为。cPython假设列表适合内存。这扩展到行为类似于列表的对象,例如xrange。本质上,
len
函数期望
len
方法返回可转换为
大小的内容,如果逻辑元素的数量太大,即使这些元素实际上不存在于内存中,也不会发生这种情况。

您会发现

xrange(1 << 31 - 1)

xrange(1)感谢您解释为什么
len
特别是这样。cPython len期望
size\u t
。小问题:仅仅因为长度对于
size\u t
来说太大并不意味着对象不适合内存。例如,我有一个类表示一个位字段,而
\u len\u
停止工作对于32位Python中超过256MB的对象,请尝试
hex(1@Gregg,有趣的是,我得到的是overflowerrror而不是ValueError(接受的A到该Q)问题是,对于您的特定应用程序,您需要一个无法放入内存的
随机.sample
,但每个Python结构都必须放入内存。如果您打开另一个Q并更详细地指定参数,那么为特定应用程序提供帮助可能更实际…@Alex,实际上,该示例没有为了适应内存,但在2.4(我知道,老消息!)随机模块中,它执行了一个len()调用,但失败了!xrange(1
random.sample
需要
调用Python 2.5、2.6、3.0和3.1中的len()
,并且该调用在
xrange上失败(1@Alex,我只是想从random.sample方法中拿出勇气,编写我自己的方法,因为它非常简单。当然,如果
ABUNCH
非常大,那么应该采取一些预防措施(性能方面)。
r = xrange(1<<32)
assert len(r) == 1<<32
ValueError: xrange object size cannot be reported`__len__() should return 0 <= outcome
xrange(1 << 31 - 1)