我正在编写一个构建字典的脚本,我观察到一种奇怪的行为。
我将在下面用一个小例子来描述它。
def test_f(parameter):
parameter.update({'watermelon':'22'})
return parameter
fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(fruits)
简而言之,我有一个字典,我将其传递给函数test_f
。该函数将新字典附加到输入并返回它。我在名为new_fruits
的变量中捕获函数的输出。但是,这也会更改原始变量fruits
。
为什么原始变量fruits
会发生变化?
我是否以错误的方式使用update
方法?
答案 0 :(得分:5)
不,你正在使用它。
但是列表,词典等是可变类型。即使您在本地范围内更改它们,它们也会更新。因为,python实际上是通过名称而不是值传递参数。
从here了解详情。
解决方案:
我建议你制作一本新的字典副本并将其作为函数的参数传递。使用copy.deepcopy
复制字典。
更改您的函数调用,如下所示:
import copy
fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(copy.deepcopy(fruits))