import的模块,在python解释器中只有一份copy

2020年1月5日 / 11次阅读 / Last Modified 2020年1月5日

在分析设计程序和debug的时候,有个细节要注意,程序运行时,python解释器中同一个模块,只有一份copy。不管在多少个不同的模块中import了一个相同的模块,这些不同的模块访问的都是同一个地址同一个模块。

这样,就带来了一个设计上的细节,像C语言一样,我们可以通过某个模块中的全局变量,来控制这个模块的运行方式,而对这个模块全部变量的修改,会在全局生效!

python这样设计是合理的,不需要为相同的模块代码创建不同的内存空间!节省内存,也加快import的速度。

下面这段测试代码,说明了本文的主题,import的模块,在python解释器中,只有一份copy。

$ cat a.py

import b
import c

b.sing = 123
c.p_sing()
print(id(b))
print(id(c.b))

$ cat b.py

sing = 0

$ cat c.py

import b

def p_sing():
    print(b.sing)

b模块只有一个全局变量sing,默认值为0。a作为程序入门,import b,然后将b.sing修改为123。a还import了c,调用c的p_sing函数。c模块也有import b,p_sing的功能就是打印b.sing这个全局变量。最后再a中打印出模块b的地址。下面是执行结果:

$ python3 a.py
123
140346404006472
140346404006472

b.sing的值被a模块中的代码成功修改,在c模块的代码中打印出来,a.b和c.b的地址一样!

-- EOF --

本文链接:https://www.pynote.net/archives/1730

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top