代码如下:
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)