当我希望检索和替换dict中的值时,我天真地写道:
old_value = my_dict['key']
my_dict['key'] = new_value
但是..这是'key'
哈希表中my_dict
的两次查找。而且我确信只有一个是必要的。
如何只使用一次查找才能获得相同的行为? python是否自动将JIT优化掉了?
[编辑]:我知道python dict查找很便宜,并且除非my_dict
很大或者操作完成数十亿次毫秒,否则性能提升会非常麻烦。
我很好奇这个显然基本的功能是否在python中实现,如old_value = my_dict.retrieve_and_replace('key', new_value)
。
答案 0 :(得分:1)
在dict中存储引用而不是值将执行您想要的操作。这并不是一个优雅的演示,只是一个简单的演示:
>>> class MyMutableObject(object):
pass
>>> m = MyMutableObject()
>>> m.value = "old_value"
>>> my_dict["k"] = m
现在,当您想要将my_dict["k"]
更改为新值时,请记住旧值,并在"k"
上进行一次查询:
>>> m2 = my_dict["k"]
>>> m2.value
'old_value'
>>> m2.value = 'new_value'
由您自行决定复杂支付的价格是否值得节省一次字典查询的时间。解除引用m2.value
并重新分配它将花费2个以上的字典查找。