当前位置: 代码迷 >> 综合 >> Python3中以yield中出现的问题
  详细解决方案

Python3中以yield中出现的问题

热度:17   发布时间:2023-10-29 04:05:33.0

Python3中yield中出现的问题

先看问题代码

if __name__=="__main__":a=[]b={}for i in range(1,5):if(i%2!=0):b["top"]=ielse:b["end"]=ia.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"]=ielse:b["end"]=ia.append(b.copy())print(a)

利用list的copy函数将其拷贝出来从而获得新的内存用来存储即可,输出结果如下:

[{'top': 1, 'end': 2}, {'top': 3, 'end': 4}]

  相关解决方案