Python3中以yield中出现的问题

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}]

猜你喜欢

转载自blog.csdn.net/qq_36797488/article/details/108245393