Python 中的深浅拷贝

Python 中的深浅拷贝

今天在写代码的时候遇到了一个这个问题,就是我从数据库里面 查询出来几个对象,然后我遍历,想用id作为这个对象的key,这个对象值,作为value,这样的话,就将一个列表转换成了一个字典,方便时候。
但是在使用的时候,出现问题了,就是我在取出来之后,我需要去修改这个对象的值(在一个循环里面),这样就导致了一个对象多次被取出来修改。

id_process_mapping = {entity.id: entity for entity in process_list}
for segment in segments:
	process_ids = segment_process_mapping.get(segment.id)
	processes: list = [id_process_mapping.get(process_id)for process_id in process_ids]  # 这里获取到
	for process in processes:
		setattr(process, "product_s_id", segment.id)  # 然后循环给这个对象添加至
	setattr(segment, "children", processes)  # 最后赋值到segment上面

这样就会出现一个问题,就是我出来的对象,使用一个对象,我每次修改的都是一个,值会是最后一次修改的值,这并不是我想要的。
所以考虑到python的深浅拷贝。
最后使用copy里面的deepcopy, 时间换空间,定义了一个新的deep_processes来处理。

import copy
id_process_mapping = {entity.id: entity for entity in process_list}
for segment in segments:
	process_ids = segment_process_mapping.get(segment.id)
	processes: list = [id_process_mapping.get(process_id)for process_id in process_ids]
	deep_processes: list = copy.deepcopy(processes)
	for process in deep_processes:
		setattr(process, "product_segment_id", segment.id)  
	setattr(segment, "children", deep_processes)  

可以参考下面的文章
通俗易懂,搞定Python中的深浅拷贝

#python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值