平时写脚本碰到的一个小问题。
错误场景是这样的,我想要给接口参数里面的一个字段
比如请求体是{ XXX:XXX
XXX:XXXX
"SysNum": [ {'ID':123} ],{'ID':456},{'ID':789 }]
}
我需要取文件里的值,用for循环一个个给到SysNum。
比方取得的是numsget = [123,456,789]
A =[]
B={'ID':123}
for Num in numsget:
扫描二维码关注公众号,回复:
2819816 查看本文章
B = copy.deepcopy(B)
B['ID']=Num
A.append(B)
最后期待A是[ {'ID':123} ],{'ID':456},{}'ID':789 }]
实际结果:[ {'ID':789} ],{'ID':789},{}'ID':789 }]
是不是觉得很奇怪,代码没问题啊。
其实这就要说到copy和=的问题。
其实copy.copy 和=都是相当于给个指针,地址没有变,所以后面再赋值,是改变了原来的值。
这里其实是要用到copy.deepcopy. 深度copy,这样才能新开辟空间,这样后面再赋值,才不会影响原来的。
修改后:
A =[]
B={'ID':123}
for Num in numsget:
B = copy.deepcopy(B)
B['ID']=Num
A.append(B)