【问题标题】:Python value in dictionary changed without update [duplicate]字典中的 Python 值在没有更新的情况下更改 [重复]
【发布时间】:2021-12-05 10:27:21
【问题描述】:

我试试这个简单的代码:

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')

【问题讨论】:

  • dict[key] = 123 这个语句就地改变了字典
  • 是的,我明白这是怎么发生的,但我不明白为什么会这样?
  • dict是通过引用传入函数的,所以函数内部的dict和外部的my_dict都指向同一个对象。

标签: python dictionary


【解决方案1】:

你正在改变参数,这就是为什么,例如看到这个

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

【讨论】:

  • 谢谢大家的回答,现在很清楚了
  • @garikf 如果您觉得有帮助,您可以点击投票按钮附近答案上的复选标记选项
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多