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