Python:异常行为字典更新方法

Python:异常行为字典更新方法,python,function,dictionary,Python,Function,Dictionary,我正在写一本字典的脚本,我观察到一种奇怪的行为 下面我将用一个小例子来描述它 def test_f(parameter): parameter.update({'watermelon':'22'}) return parameter fruits = {'apple':20, 'orange': 35, 'guava': 12} new_fruits = test_f(fruits) 简而言之,我有一个字典,我把它传递给一个函数,test\u f。该函数向输入追加一个新字典并

我正在写一本字典的脚本,我观察到一种奇怪的行为

下面我将用一个小例子来描述它

def test_f(parameter):
    parameter.update({'watermelon':'22'})
    return parameter

fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(fruits)
简而言之,我有一个字典,我把它传递给一个函数,
test\u f
。该函数向输入追加一个新字典并返回它。我在一个名为
new\u fruits
的变量中捕获函数的输出。但是,这也会更改原始变量
fruits

为什么原始变量
fruits
会更改?
我是否以错误的方式使用了
update
方法?

不,您使用的方法是正确的

但是列表、字典等都是可变类型。即使您在本地范围内更改它们,它们也会得到更新。这是因为python实际上是按名称传递参数,而不是按值传递参数

阅读更多来自

解决方案:

我建议您制作一个新的字典副本,并将其作为函数的参数传递。使用
copy.deepcopy
复制字典

更改函数调用,如下所示:

import copy 

fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(copy.deepcopy(fruits))

不,你用对了

但是列表、字典等都是可变类型。即使您在本地范围内更改它们,它们也会得到更新。这是因为python实际上是按名称传递参数,而不是按值传递参数

阅读更多来自

解决方案:

我建议您制作一个新的字典副本,并将其作为函数的参数传递。使用
copy.deepcopy
复制字典

更改函数调用,如下所示:

import copy 

fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(copy.deepcopy(fruits))

很高兴知道这有帮助。你可以勾选我答案左上方的绿色标记,将其标记为已接受。很高兴知道这有帮助。你可以勾选我答案左上方的绿色标记,将其标记为已接受。