Python列表的append为什么是这样?

代码如下:

INFO = []

def main():

    info = {}
    for i in range(10):
            info["number"] = i
                INFO.append(info)

main()

print(INFO)
结果如下:
[{'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}, {'number': 9}]

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢。

def main():
    info = {}
    for i in range(10):
        info = {} #加上
        info["number"] = i
        INFO.append(info)

INFO = []

main()
print(INFO)

[{'number': 0}, {'number': 1}, {'number': 2}, {'number': 3}, {'number': 4}, {'number': 5}, {'number': 6}, {'number': 7}, {'number': 8}, {'number': 9}]

瞅了半天,终于明白为什么了,,,因为你添加的是info, 而不是info的数值, 如果info改变了,那么你添加的东西也随之改变。
大体可以借鉴一下深度拷贝,浅拷贝的意思。
我用了一下copy包的,深度拷贝函数deepcopy。

import copy
INFO = []

def main():
    info = {}
    for i in range(10):
        info["number"] = i
        INFO.append(copy.deepcopy(info))

main()
print(INFO)

应该也有更加优秀的代码,暂时给楼主一个想法,如果你有更好的办法,欢迎交流

因为append的是dict“地址”,不是每次更新的副本
from copy import deepcopy
INFO.append(deepcopy(info))

因为字典键对值是唯一的,而这里的键是一个number。应将info = {}放在循环语句中。见代码:

INFO = []
def main():   
     for i in range(10):
          info = {}
          info["number"] = i
          INFO.append(info)   
m=main()
print(INFO)

图片说明