0

这似乎是一些测试问题。如果您考虑这个使用缓存参数作为第一个参数的函数

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 字典),但它实际上是在传递该引用还是在做一些低效的复制?

4

1 回答 1

1

传递给缓存的字典不会被复制。只要cache变量没有在函数内部反弹,它就保持同一个对象,对它所引用的字典的修改会影响外部的字典。

在这种情况下甚至不需要返回cache(实际上示例代码也不需要)。

如果f是类字典对象上的方法可能会更好,以便在概念上更清楚。

如果使用该id()函数(内置,不需要导入),您可以获得任何对象的唯一标识符。您可以使用它来确认您确实在处理同一个对象而不是任何类型的副本。

于 2012-05-08T06:48:13.073 回答