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

Ami*_*mit 0 python dictionary function

我正在编写一个构建字典的脚本,我观察到一种奇怪的行为.

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

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

fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(fruits)
Run Code Online (Sandbox Code Playgroud)

简而言之,我有一个字典,我传递给一个函数,test_f.该函数将新字典附加到输入并返回它.我在一个名为的变量中捕获函数的输出new_fruits.然而,这也改变了原始变量fruits.

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

Ahs*_*que 5

不,你正在使用它.

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

这里了解更多.

解:

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

更改您的函数调用如下:

import copy 

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