Python3中yield中出现的问题
先看问题代码
if __name__=="__main__":
a=[]
b={}
for i in range(1,5):
if(i%2!=0):
b["top"]=i
else:
b["end"]=i
a.append(b)
print(a)
预期的结果应该是
[{'top': 1, 'end': 2}, {'top': 3, 'end': 4}]
而上面代码所输出的结果如下
[{'top': 3, 'end': 4}, {'top': 3, 'end': 4}]
通过输出可以看出a在最后面添加的应该只是b的地址。所以更改其代码如下:
if __name__=="__main__":
a=[]
b={}
for i in range(1,5):
if(i%2!=0):
b["top"]=i
else:
b["end"]=i
a.append(b.copy())
print(a)
利用list的copy函数将其拷贝出来从而获得新的内存用来存储即可,输出结果如下:
[{'top': 1, 'end': 2}, {'top': 3, 'end': 4}]