1. range()返回一个list,xrange()返回一个迭代对象
print range(10)
print xrange(10)
print type(range(10))
print type(xrange(10))
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
xrange(10)
<type 'list'>
<type 'xrange'>
2. 通过sys.getsizeof(()方法可以看到range返回list,它所占内存为所有元素累加;xrange则只返回一个32byte的对象,无论它要返回多少数值。
import sys
print sys.getsizeof(range(10000))
print sys.getsizeof(xrange(10000))
print sys.getsizeof(xrange(100))
输出:
80064
32
32
3. 性能比较
import time
start = time.time()
for i in range(100000000):
pass
print "range use %ss" % (int(time.time() - start))
start = time.time()
for i in xrange(100000000):
pass
print "xrange use %ss" % (int(time.time() - start))
输出:
range use 6s
xrange use 4s
4. 总结
正常情况下,使用range和xrange都行,如果你range值很大,则无论存储空间还是迭代性能xrange都优于range。