[debug+Python] 复制字典不能直接用 ‘=’,要用dict_name.copy()

问题描述

当我想要在函数中返回字典dict1,但是后续的操作还要改变dict1。即,字典的后续操作和字典的返回相矛盾。

一个思路是,我再定义一个字典dict2,令其等于dict1。然后dict2用于后续更改,dict1作为返回值。即,返回和修改对不同的字典进行。


bug描述

我直接使用:

dict2 = dict1

然后dict1作为返回值,dict2用于函数内的后续修改。

结果就发现,我对dict2进行修改时,dict1也被同样地修改了。


解决方式

直接使用=进行字典的复制,dict2指向的还是dict1 (类似C语言中指针的概念),即dict1dict2的修改是相通的。

字典的复制要用字典的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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值