range对象仅存储start、stop、step三个整数,通过数学公式即时计算索引访问、长度和成员判断,内存占用恒定约48字节,与范围大小无关。

因为 range(10**18) 不是生成一个包含 10¹⁸ 个整数的列表,而是返回一个 range 对象——它只存起点、终点和步长三个整数,用到时才按需计算,内存占用恒定在几十字节。
range 是一个惰性序列对象,不是容器
Python 的 range 类型本质上是一个不可变的序列类型,但它不预先分配元素内存。它内部只保存:
- start(起始值)
- stop(结束值)
- step(步长)
所有索引访问(如 r[1000000000])、迭代、长度查询(len(r))、成员判断(123 in r)都通过数学公式即时计算,无需遍历或存储中间值。例如:r[1000000000] 直接算出 start + 1000000000 * step,不依赖前 999999999 项。
对比 list(range(...)) 才真爆内存
如果写 list(range(10**6)),Python 就会真的创建含 100 万个 int 对象的列表,每个 int 占约 28 字节(CPython),总内存超 28 MB;而 range(10**6) 仍只占约 48 字节。
Python 环境工具专业版功能概述Python 环境工具专业版是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。执行完成后建议检查结果是否符合预期,并保留必要记录。使用与执行同时注意输入完整性、执行条件和输出可用性。从功能定位来看,该技能
range(10**18) 同理:它不关心 stop 多大,只要 start/stop/step 是整数,对象就成立。哪怕 stop 是 10**100,内存开销也几乎不变。
底层实现靠数学逻辑,不是迭代器包装
注意:range 不是基于 __iter__ + yield 实现的生成器,也不是简单封装了迭代器。它的 __contains__、__getitem__、__len__ 都直接走整数运算路径:
-
len(range(a, b, s)) → (b - a + s - 1) // s(整数除法) range(a,b,s)[i] → a + i * s-
x in range(a,b,s)→ 检查(x - a) % s == 0且a ≤ x (带符号处理)
这种设计让 range 在大范围数值场景(如循环索引、分片计算、算法坐标生成)中既高效又安全。










