python中深拷贝的探究

今天在写Django小案例时发现:一个循环的问题,居然发现跟深拷贝有关联,下面是循环的代码:

car_list=[<CarDetail: 黑色>, <CarDetail: 白色>, <CarDetail: 绿色>]
carstyle_list=[<CarStyle: 三厢>, <CarStyle: 两厢>]
    json_list4=[]
    json_list5={}
for car in car_list:
            json_list5['brande']=car.brande.name
            json_list5['age']=str(car.age)
            json_list5['mileage']=str(car.mileage)
            json_list5['car_price']=str(car.car_price)
            json_list5['status']=str(car.status)
            for carstyle in carstyle_list:
                if carstyle.name == car.style.name:
                    json_list5['image']=carstyle.image.name
             json_list4.append(json_list5)
    print(json_list4)

结果居然变成了三个同样的数据的结果如下:

[{'brande': '福特', 'status': '1', 'car_price': '5.120', 'image': 'static/style/1.jpg', 'age': '2', 'mileage': '1.22'}, {'brande': '福特', 'status': '1', 'car_price': '5.120', 'image': 'static/style/1.jpg', 'age': '2', 'mileage': '1.22'}, {'brande': '福特', 'status': '1', 'car_price': '5.120', 'image': 'static/style/1.jpg', 'age': '2', 'mileage': '1.22'}]

试了多次终于发现,原来这跟深拷贝有关,之前是因为append()等于一直指向引用json_list5,所以一直等到循环json_list5
最后的修改状态,json_list4列表中的三个值指向最后json_list5的状态,所以出现上面三个值相同的情况,未避免发生这种情况,于是我把引用json_list5的地址,改为拷贝值,也就是进行深拷贝,就完全改变了三个值的情况,代码如下:

for car in car_list:
            json_list5['brande']=car.brande.name
            json_list5['age']=str(car.age)
            json_list5['mileage']=str(car.mileage)
            json_list5['car_price']=str(car.car_price)
            json_list5['status']=str(car.status)
            for carstyle in carstyle_list:
                if carstyle.name == car.style.name:
                    json_list5['image']=carstyle.image.name

            import copy
            b=copy.deepcopy(json_list5)
            print(json_list5)
            print(json_list4)
            json_list4.append(b)
        print(json_list4)

最终得到想要的结果:

[{'age': '2', 'status': '1', 'mileage': '3.50', 'brande': '福特', 'car_price': '7.800', 'image': 'static/style/1_JukMMgd.jpg'}, {'age': '1', 'status': '1', 'mileage': '2.00', 'brande': '奥迪', 'car_price': '6.000', 'image': 'static/style/1_JukMMgd.jpg'}, {'age': '2', 'status': '1', 'mileage': '1.22', 'brande': '福特', 'car_price': '5.120', 'image': 'static/style/1.jpg'}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值