copy.deepcopy() ,copy.copy()和“=”的区别

平时写脚本碰到的一个小问题。

错误场景是这样的,我想要给接口参数里面的一个字段

比如请求体是{ 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:

    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)

猜你喜欢

转载自blog.csdn.net/weixin_41235146/article/details/81567571
今日推荐