这看起来像是一些测试题。如果您考虑使用缓存参数作为第一个参数的函数
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字典中),但它实际上是传递了那个引用,还是做了一些低效的复制?
发布于 2012-05-08 14:48:13
不复制传递到缓存的字典。只要cache变量不是函数内部的rebound,它就会保持相同的对象,并且对它引用的字典的修改将影响外部的字典。
在这种情况下,甚至不需要返回cache (实际上示例代码也不需要)。
如果f是类字典对象上的一个方法,可能会更好,以使这一点在概念上更清晰。
如果您使用id()函数(内置的,不需要导入),您可以获得任何对象的唯一标识符。您可以使用它来确认您确实在处理相同的对象,而不是任何类型的副本。
https://stackoverflow.com/questions/10493500
复制相似问题