今天使用列表写入字典时,发现列表内容居然全是相同的字典,并且还是最后一个写入的字典
例:
a=[] b={ "name":" " } for i in range(4): b["name"]=i a.append(b) print(a)
运行结果为:
[{'name': 3}, {'name': 3}, {'name': 3}, {'name': 3}]
?  ? ?

里面不是应该是0,1,2,3吗,为什么全是3呢,找了一些资料发现问题了,原来列表用append为列表添加数据的时候并不是将完整的字典数据都写入的列表当中,而是写入字典数据所在地址,而以上这种方式修改的是该内存地址下的数据,这就导致列表存储的全是同一个字典的地址,最后输出时从地址调出的就是最后的字典了

解决办法
可以使用copy()解决这一问题
a=[] b={ "name":" " } for i in range(4): b["name"]=i a.append(b.copy()) print(a
)
输出:
[{'name': 0}, {'name': 1}, {'name': 2}, {'name': 3}]
完美解决!

技术
©2020 ioDraw All rights reserved
46岁微软:从盖茨缔造帝国到纳德拉复兴第二章 初识C语言常量2021前端高频面试题(一定要看哦!!!)滤波器,窗函数以及切比雪夫逼近法新手快速了解冒泡排序、插入排序的详解pytorch训练过程中GPU利用率低Golang经典面试题初识Mongdb之数据查询篇(三)人类第一架火星直升机正在部署 择机在这颗异域星球首飞python判断两个列表(list)中的值是否相同([1,2,3]和[3,2,1])