python中解决字典写入列表的问题

今天使用列表写入字典时,发现列表内容居然全是相同的字典,并且还是最后一个写入的字典
例:

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

完美解决!

猜你喜欢

转载自blog.csdn.net/xinzhilinger/article/details/102771842