在我做量化交易的时候,有一个需求是我修改一个字典里面内容。
每分钟查一次数据库,如果数据库有改动就更新字典的内容。
我当时对于赋值的理解还只停留在
a = 1
这个层次上。
要我替换一个 dict 的内容的话,我本来是打算这么做的
a = dict
b = a
但是,由于这个字典有几十个,并且,经过层层传递,将其传到很远的文件执行。
并且,由于项目本身的框架限制,我无法做到把新做的 dict 传到合适的位置。
看如下代码:
1 | def f1(dict): |
如何把 f2 里面的 dict 进行修改呢?
方法非常简单
只需要修改 a 就好了。
原理是,对于类似 dict 这种数据结构,其 a 指向的是内存地址,所以,如果层层传递,那么传的一直是内存地址,如果修改了 dict ,那么,函数拿到 dict 也是修改过的。
如果按照下面的方式写代码,就没有作用了。
1 | def f1(dict): |
这样修改 a 的话,f2 是不变的,因为,引用已经改变了。
这是 python 中非常基础的一项知识,但是,我确是花了 5 天的时间才理解,实在是惭愧,之前,只是听说过,还没有用过。