我不太明白Python中迭代器是如何拥有内存的。
>>> l1 = [1, 2, 3, 4, 5, 6]
>>> l2 = [2, 3, 4, 5, 6, 7]
>>> iz = izip(l1, l2)
我们仍然需要O(min(l1, l2))
内存,因为我们需要加载列表l1
and l2
在记忆中。
我认为迭代器的主要用途之一是节省内存 - 但它在这里似乎没有用。
同样,下面的代码我也不清楚:
>>> l1 = ( n for n in [1, 2, 3, 4, 5, 6] )
>>> l2 = ( n for n in [2, 3, 4, 5, 6, 7] )
>>> iz = izip(l1, l2)
我们需要在将列表转换为生成器之前加载列表,对吧?这意味着我们会浪费内存。那么 - 生成器在这里还有什么意义呢?
这是唯一对我有意义的情况:
def build_l1():
for n in xrange(1, 6):
yield n
def build_l2:
for n in xrange(2, 7):
yield n
l1 = build_l1()
l2 = build_l2()
iz = izip(l1, l2)
没有任何数组被加载到内存中。因此我们在O(1)
memory.
Python 中迭代器函数的内存使用情况如何?前两种情况似乎使用O(min(l1, l2))
记忆。我认为迭代器的主要目的是节省内存,这使得前两种情况显得毫无用处。