0%

python | 利用指针修改内容

在我做量化交易的时候,有一个需求是我修改一个字典里面内容。

每分钟查一次数据库,如果数据库有改动就更新字典的内容。

我当时对于赋值的理解还只停留在

a = 1

这个层次上。

要我替换一个 dict 的内容的话,我本来是打算这么做的

a = dict
b = a

但是,由于这个字典有几十个,并且,经过层层传递,将其传到很远的文件执行。

并且,由于项目本身的框架限制,我无法做到把新做的 dict 传到合适的位置。

看如下代码:

1
2
3
4
5
6
7
8
9
10
11
def f1(dict):
f2(dict)

def f2(dict):
print(dict)

a = {
'test' : 'test',
}

f1(a)

如何把 f2 里面的 dict 进行修改呢?

方法非常简单

只需要修改 a 就好了。

原理是,对于类似 dict 这种数据结构,其 a 指向的是内存地址,所以,如果层层传递,那么传的一直是内存地址,如果修改了 dict ,那么,函数拿到 dict 也是修改过的。

如果按照下面的方式写代码,就没有作用了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def f1(dict):
f2(dict)

def f2(dict):
dict1 = {
'test':dict['test']
}
print(dict1)

a = {
'test' : 'test',
}

f1(a)

这样修改 a 的话,f2 是不变的,因为,引用已经改变了。

这是 python 中非常基础的一项知识,但是,我确是花了 5 天的时间才理解,实在是惭愧,之前,只是听说过,还没有用过。

请我喝杯咖啡吧~