问题描述
当我想要在函数中返回字典dict1
,但是后续的操作还要改变dict1
。即,字典的后续操作和字典的返回相矛盾。
一个思路是,我再定义一个字典dict2
,令其等于dict1
。然后dict2
用于后续更改,dict1
作为返回值。即,返回和修改对不同的字典进行。
bug描述
我直接使用:
dict2 = dict1
然后dict1
作为返回值,dict2
用于函数内的后续修改。
结果就发现,我对dict2
进行修改时,dict1
也被同样地修改了。
解决方式
直接使用=
进行字典的复制,dict2
指向的还是dict1
(类似C语言中指针的概念),即dict1
和dict2
的修改是相通的。
字典的复制要用字典的copy()
函数:
dict2 = dict1.copy()
示例
def samples_per_class(labels, label_map=None):
'''
input:
lables: ndarray, labels of samples in train/validation/test/whole set
label_max: (optional) dict, map between raw labels and labels to calculate
output:
count_result: sample number of each class with encoded label(eg. label for compute)
'''
if not type(labels) is np.ndarray: # tensor转ndarray
labels=labels.cpu().detach().numpy()
count_result=Counter(labels) # 对labels各label的数量进行计数, key为1,2,……
count_for_display=count_result.copy() # 保存label为编码结果的计数结果,用于返回
print("sample numbers of each class are as follow: ")
if label_map is not None: # 将用于计算的label替换为初始的label
for key, value in label_map.items():
# print(key, value)
count_for_display.update({key: count_for_display[value]})
count_for_display.pop(value)
for key, value in count_for_display.items():
print(key, ':', value)
return count_result