python的列表赋值问题

对于python对象“保存引用而非其值”这个基本概念之前一直未有深切体会。今天正好遇到一个bug,足以说明问题:

定义了这样一个函数

def CheckoutAdsb(usfuldatar):
    rstlist=[]
    rowRst = {'taskno': usfuldatar[0], 'flagtype': 'none', 'sourcefile': 'none','taskdesc': 'none'}
    mytaskno = str.replace(usfuldatar[0], 'QZ-', '')  # 注意QZ开头的处理
    # 对于CAO应匹配该项目对应的任务
    if str.find(usfuldatar[0], 'CAO') > -1:
        ……
    myreftask = Mainttask.objects.filter(taskno__contains=str.strip(mytaskno))
    if myreftask.count() == 1:
        myreftaskid=myreftask.first().id
        ……
        myflags=mtskflag.objects.filter(ref_task_id=myreftask.first().id)
        for flag in myflags:        
            rowRst['flagtype'] = flag.spectype
            rowRst['taskdesc'] = mytaskrev.taskdesc
            rowRst['sourcefile'] = flag.specdesc
            rstlist.append(rowRst)
    ……

    return rstlist

测试时发现rstlist中的每个内部值都一样,经过一番折腾发现了问题在红色部分

修改后的代码如下:

for flag in myflags:
    newrowRst={}#关键之处
    newrowRst['taskno'] = usfuldatar[0]
    newrowRst['flagtype'] = flag.spectype
    newrowRst['taskdesc'] = mytaskrev.taskdesc
    newrowRst['sourcefile'] = flag.specdesc
    rstlist.append(newrowRst)

问题顺利解决。如果我在循环内每次都重新初始化rowRst也可以起到作用。关键就在于领会python变量存储的不是值这个问题。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值