在Python 2中,xrange()
和range()
都是用于生成整数序列的函数,但它们在内存使用上有显著区别:
range()
:一次性生成完整的整数列表并存储在内存中xrange()
:生成一个xrange对象,它是一个生成器,按需产生序列中的数字,不会一次性生成所有值xrange()
的主要优势在于内存效率:
range()
会消耗大量内存来存储整个列表xrange()
只在需要时生成当前值,内存使用恒定且很小# 使用range - 内存消耗大
for i in range(1000000):
# 这里会先在内存中生成一个包含100万个元素的列表
pass
# 使用xrange - 内存效率高
for i in xrange(1000000):
# 这里不会预先生成所有数字,只在需要时生成当前值
pass
在Python 3中:
xrange()
被移除range()
的行为改为类似Python 2中的xrange()
range()
的行为,可以使用list(range())
使用xrange()
的理想场景:
为什么我的Python 3代码中xrange报错? 因为Python 3移除了xrange,直接用range即可获得相同的内存效率。
如何判断我该用range还是xrange?
import sys
import time
# 内存使用对比
print("range(1000000)内存大小:", sys.getsizeof(range(1000000))) # Python 2中会很大
print("xrange(1000000)内存大小:", sys.getsizeof(xrange(1000000))) # 很小且恒定
# 执行时间对比
start = time.time()
for i in range(1000000):
pass
print("range耗时:", time.time() - start)
start = time.time()
for i in xrange(1000000):
pass
print("xrange耗时:", time.time() - start)
在大多数情况下,xrange的执行速度也会比range快,特别是对于大范围的循环。
没有搜到相关的文章