Python字典中的数值在没有更新的情况下发生了改变。

9 浏览
0 Comments

Python字典中的数值在没有更新的情况下发生了改变。

这个问题已经有答案了:

如何通过引用传递变量?

在Python中传递值 [重复]

我尝试这个简单的代码:

def chage_value(dict, key):
    dict[key] = 123
    return dict
my_dict = {'a': 1, 'b': 2}
print(my_dict)
chage_value(my_dict, 'a')
print(my_dict)

这给了我输出:

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

为什么\'a\'的值会改变?我没有做像my_dict = chage_value(my_dict,\'a\')这样的事情。

admin 更改状态以发布 2023年5月23日
0
0 Comments

你是因为修改了参数才出现这种情况的,比如看看这个

def add_to(num, target=[]):
    target.append(num)
    return target
add_to(1)
# Output: [1]
add_to(2)
# Output: [1, 2]
add_to(3)
# Output: [1, 2, 3]

你可能期望每次调用 add_to 时都会创建一个新的列表,但事实并非如此。你修改了参数,如果不想修改参数,就要避免这种情况

from copy import deepcopy
def foo(some_var):
    some_var_ = deepcopy(some_var)
    ...
    return some_var_

这里你是修改了 some_var 的副本而不是原始版本。

你可以在这里查看其他可变东西:https://book.pythontips.com/en/latest/mutation.html#mutation

0