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

时间:2017-04-23 05:52:44

标签: 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_f。该函数将新字典附加到输入并返回它。我在名为new_fruits的变量中捕获函数的输出。但是,这也会更改原始变量fruits

为什么原始变量fruits会发生变化? 我是否以错误的方式使用update方法?

1 个答案:

答案 0 :(得分:5)

不,你正在使用它。

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

here了解详情。

解决方案:

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

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

import copy 

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