最近遇到项目问题,部分源码如下:
if image:
image_dict = {}
#TODO:image dataset
cam_list = ['cam_back','cam_front', 'cam_left', 'cam_right']
for i in range(len(cam_list)):
----------------------------------------------
--------------------***-----------------------
----------------------------------------------
input_dict.update({
'gt_names': gt_names,
'gt_boxes': gt_boxes_images
})
if "points" in get_item_list:
points = self.get_lidar(sample_idx)
input_dict['points'] = points
#TODO:
image_dict.update({
'%s'%cam_list[i]:input_dict
})
data_dict = self.prepare_data(data_dict=image_dict['%s'%cam_list[i]])
data_dicts.update({
'%s'%cam_list[i]:data_dict
})
跑代码时,发现循环中data_dict使用update方法后,字典中新添加的数据会将前面的字典中的建值给覆盖掉。
后面查明原因是因为在for循环中data_dict声明后,一直在操作同一块内存,故而导致问题的产生。
解决方案:使用copy()开辟新的内存空间。
if image:
image_dict = {}
#TODO:image dataset
cam_list = ['cam_back','cam_front', 'cam_left', 'cam_right']
for i in range(len(cam_list)):
----------------------------------------------
--------------------***-----------------------
----------------------------------------------
input_dict.update({
'gt_names': gt_names,
'gt_boxes': gt_boxes_images
})
if "points" in get_item_list:
points = self.get_lidar(sample_idx)
input_dict['points'] = points
#TODO:
image_dict.update({
'%s'%cam_list[i]:input_dict
})
data_dict = self.prepare_data(data_dict=image_dict['%s'%cam_list[i]])
data_dicts.update({
'%s'%cam_list[i]:data_dict.copy()
})