这似乎是一些测试问题。 如果您认为此函数使用缓存参数作为第一个参数
def f(cache, key, val):
cache[key] = val
# insert some insanely complicated operation on the cache
print cache
现在创建一个字典并使用如下函数:
c = {}
f(c,"one",1)
f(c,"two",2)
这似乎按预期工作(即添加到c字典),但它实际上是通过该引用还是它正在做一些效率低下的副本?
答案 0 :(得分:1)
不会复制传递给缓存的字典。只要函数内的cache
变量不是反弹,它就会保持相同的对象,对它引用的字典的修改会影响外面的字典。
在这种情况下甚至不需要返回cache
(实际上示例代码没有)。
如果f
是类字典对象上的方法,可能会更好,以使其在概念上更清晰。
如果使用id()
函数(内置,不需要导入),则可以获取任何对象的唯一标识符。您可以使用它来确认您真正真正地处理相同的对象而不是任何类型的副本。