我不太明白Python中的迭代器如何具有记忆功能。
>>> l1 = [1, 2, 3, 4, 5, 6]
>>> l2 = [2, 3, 4, 5, 6, 7]
>>> iz = izip(l1, l2)
我们仍需要O(min(l1, l2))的内存,因为我们需要在内存中加载列表l1和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)
的内存使用量。
Python中迭代器函数的内存使用情况是如何工作的?前两种情况似乎使用O(min(l1, l2))
的内存。我认为迭代器的主要目的是节省内存,这使得前两种情况似乎毫无用处。
build_l1
和build_l2
没有太多意义,xrange
已经只存储(起始值,终止值,步长)
了。 - Kos