Python中range(n)的空间复杂度疑问:是O(n)还是O(1)?
Python中
range()遍历的空间占用问题 在Python 3里,用for i in range(n)遍历是O(1)空间复杂度,不会创建包含0到n-1的完整容器。
range(n)返回的是range类型的对象,它不是列表,也不会预先生成所有元素存在内存里。这个对象只存了起始值、终止值和步长三个核心参数,每次迭代时才计算出下一个元素。- 你提到
range能转成列表(比如list(range(n))),这是因为range实现了可迭代协议,转换时会主动遍历它生成所有元素并装进列表,但这是额外的转换操作,不是for循环遍历的默认行为。 - 这种遍历的空间效率和
while i < n的写法完全一致,都是只维护一个迭代变量i,额外空间开销恒定。
内容的提问来源于stack exchange,提问作者garrnizon
相关产品推荐
相关产品推荐

