【发布时间】:2015-12-07 12:05:24
【问题描述】:
这里发生了什么?为什么list(f(seq)) 返回的不是f 产生的元素列表?
>>> def f(seq):
... a = []
... for i in seq:
... yield a
... a.append(i)
...
>>> f([1,2,3])
<generator object f at 0x1066c7aa0>
>>> b = f([1,2,3])
>>> b.next()
[]
>>> b.next()
[1]
>>> b.next()
[1, 2]
>>> b.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> list(f([1,2,3]))
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
【问题讨论】:
-
消除这种依赖关系的一个解决方案是在生成时浅复制列表,将
yield a替换为yield a[:]。这是很多复制,但如果你想返回独立的列表,这是必要的。