我对编程还比较陌生,正在尝试更好地了解如何在词典中更新值。我一直遇到的问题是,当我将字典的值设置为变量并尝试在函数中更新它时,该值无法正确更新。
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_medals_1中,“ bronze”的值会正确更新,并在每次调用该函数时递增。 在函数add_medals_2中,“ silver”的值未正确更新且不会增加。我对此感到困惑,因为两个函数都相似,但没有产生我期望的输出。
答案 0 :(得分:2)
问题是,在add_medals_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
答案 1 :(得分:1)
silver_medals = test_dict['medals']['silver']
这将复制左侧的值,并将其分配给右侧的名称。
silver_medals += 10
现在,您将左侧的名称分配给新值。这将不会更改字典中的值,因为不知道原始值来自何处。