Python 通过变量修改嵌套字典

Python 通过变量修改嵌套字典,python,dictionary,Python,Dictionary,我对编程比较陌生,正在努力更好地理解如何在字典中更新值。我经常遇到的一个问题是,当我将字典的值设置为变量并尝试在函数中更新它时,该值没有正确更新 test_dict = { 'medals': { 'bronze': 0, 'silver': 0, 'gold': 0, }, } def add_medals_1(test_dict): test_dict['medals']['bronze'] += 10 print(test_dict

我对编程比较陌生,正在努力更好地理解如何在字典中更新值。我经常遇到的一个问题是,当我将字典的值设置为变量并尝试在函数中更新它时,该值没有正确更新

test_dict = {
    'medals': {
    'bronze': 0,
    'silver': 0,
    'gold': 0,
    },
}

def add_medals_1(test_dict):
    test_dict['medals']['bronze'] += 10
    print(test_dict['medals']['bronze'])

add_medals_1(test_dict) # Updates value of bronze to 10
add_medals_1(test_dict) # Updates value of bronze to 20

def add_medals_2(test_dict):
    silver_medals = test_dict['medals']['silver']
    silver_medals += 10
    print(silver_medals)

add_medals_2(test_dict) # Updates value of silver to 10
add_medals_2(test_dict) # Value of silver remains at 10
在函数add__1中,“brown”的值会正确更新,并在每次调用该函数时递增。
在函数add__2中,“silver”的值未正确更新且不会增加。我对此感到困惑,因为这两个函数是相似的,但并没有产生我所期望的输出

问题是,在
add\u\u 2
中,您不是在更新词典,而是在更新从词典中获取的副本

像这样:

def add_medals_2(test_dict):
    # 1) HERE, you are copying test_dict['medals']['silver']
    # to another memory location (variable) called silver_medals
    silver_medals = test_dict['medals']['silver']
    # 2) THEN, you update variable's value to += 10
    silver_medals += 10
    # You print the updated value
    print(test_dict)
    print(silver_medals)
    # BUT, test_dict was never updated in add_medals_2
这将复制左侧的值并将其指定给右侧的名称

silver_medals += 10

现在将左侧的名称指定给一个新值。这不会更改字典中的值,因为不知道原始值来自何处。

我添加了
print(test_dict)
,以表明它从未更新。感谢您的回复,这对我来说很有意义。@JackMoody请将此作为答案而不是评论发布。
silver_medals += 10