591821661 发表于 2023-5-24 23:44:10

为什么字典内部的值在传入函数后会发生改变?

为啥字典会增加一个元素a呢?


defdict_key_lencode(param_dict_in):
    param_dict = param_dict_in
    param_dict['a']=1
    param_dict = dict(sorted(param_dict.items()))
    StrAe = "&".join()
    return StrAe

param_dict = {'b':1,'c':2}
param_dict_temp = param_dict
s = dict_key_lencode(param_dict_temp)
print(param_dict)

运行结果:

{'b': 1, 'c': 2, 'a': 1}

isdkz 发表于 2023-5-24 23:44:11

这是因为在函数中,参数param_dict_in和param_dict都指向了同一个字典对象。在函数中对param_dict的修改也会影响到param_dict_in所指向的字典对象。因此,在函数中添加了一个键为a ,值为1的元素,导致原始字典也被修改了。

如果想要避免这种情况,可以在函数中创建一个新的字典对象,将原始字典的键值对复制到新的字典对象中。例如可以使用param_dict.copy()或者dict(param_dict)来创建一个新的字典对象。

591821661 发表于 2023-5-24 23:46:53

isdkz 发表于 2023-5-24 23:44
这是因为在函数中,参数param_dict_in和param_dict都指向了同一个字典对象。在函数中对param_dic ...

defdict_key_lencode(param_dict_in):
    param_dict = param_dict_in.copy()
    param_dict['a']=1
    param_dict = dict(sorted(param_dict.items()))
    StrAe = "&".join()
    return StrAe

param_dict = {'b':1,'c':2}
param_dict_temp = param_dict
s = dict_key_lencode(param_dict_temp)
print(param_dict)

{'b': 1, 'c': 2}

验证成功
页: [1]
查看完整版本: 为什么字典内部的值在传入函数后会发生改变?