富=“富” 定义栏(foo): foo = "酒吧"
bar(foo)
print foo
# foo is still "foo"...
foo = {'foo':"foo"}
def bar(foo):
foo['foo'] = "bar"
bar(foo)
print foo['foo']
# foo['foo'] is now "bar"?
我有一个函数在传递字典时无意中覆盖了我的函数参数。有没有一种干净的方法可以将我的参数声明为常量,或者我是否一直在函数内复制字典?
谢谢!
最佳答案
在这种情况下,如果要更改字典并保留函数的局部更改,则必须复制字典。
原因是,当您将字典传递给第二个 bar
时函数,Python 只传递对字典的引用。因此,当您在函数内部修改它时,您正在修改存在于函数外部的同一个对象。在第一bar
函数,另一方面,您将不同的对象分配给名称 foo
当你写 foo = "bar"
时在函数内部.当你这样做时,名称 foo
函数内部开始引用字符串 "bar"
而不是字符串 "foo"
.您已经更改了名称所指的对象。但是foo
在函数内部和 foo
函数外部是不同的名称,因此如果更改标有 foo
的对象在函数内部,您不会影响名称 foo
在函数之外。所以它们指的是不同的对象。
关于Python 函数参数范围(字典与字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951112/