def generator(dct):
for i in range(3):
dct['a'] = i
yield dct
g = generator({'a': None})
next(g) # -> {'a': 0}
next(g) # -> {'a': 1}
next(g) # -> {'a': 2}
g = generator({'a': None})
list(g) # -> [{'a': 2}, {'a': 2}, {'a': 2}]
next 如我所料迭代生成器。但是,list 意外迭代。我认为它应该返回 [{'a': 0}, {'a': 1}, {'a': 2}] 因为 next 迭代没有问题。
我想知道是什么造成了这种差异。
(我的环境:python 3.6.5,conda 4.5.4,Windows)
请您参考如下方法:
您的 generator() 生成器始终生成相同 dict 对象,只是在调用之间对其进行了修改。例如,如果您要将第一个 next(g) 更改为 x = next(g) ,然后在调用之前和之后检查 x next(g) 再次,您会看到 x 的值在调用之间发生变化,因为 generator() 总是修改并产生相同的 dict 对象。
