python 字典添加到列表后前面的数据被后面的数据覆盖-解决办法

list=[]
#创建字典
dictionary={}
#获取字典key值list(第一行)
keylist = table.row_values(0, 0, ncols)
#将excel数据放到字典中
for rownum in range(1,nrows):
    for colnum in range(ncols):
        dictionary[keylist[colnum]] = table.cell(rownum, colnum).value
    print dictionary
    list.append(dictionary)
    print list
print list

上面获得的数据是{A1,A1,A1}类型的数据

list=[]
#获取字典key值list(第一行)
keylist = table.row_values(0, 0, ncols)
#将excel数据放到字典中
for rownum in range(1,nrows):
    # 创建字典
    dictionary = {}
    for colnum in range(ncols):
        dictionary[keylist[colnum]] = table.cell(rownum, colnum).value
    # print dictionary
    list.append(dictionary)
    print list
print list

得到数据{A1,A2,A3}
原理分析:
dict(字典)赋给list的是一个位置,对于第一种代码,dictionary定义在循环外,每次使用list.append(dictionary)赋给 list的都是相同的位置,而在同一位置的dict的值已经改变了,所以list取到的之前位置的值改变了,表现出后面数据覆盖前面数据的表象。dict定义在循环内,相当于每一次循环生成一个dictionary,占用不同的位置存储值,所以可以赋给list不同元素不同的位置,获得不同的值。
深层次解释:
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
————————————————
版权声明:本文为CSDN博主「gavinxlf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gavinxlf/article/details/52227967

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值