我有三个模块

(1)mem.py

memory = {}

class test(object):
    def __init__(self):
        global memory
        self.internal = memory

    def set(self,key,value):
        self.internal[key]=value
    def printmem(self):
        print self.internal


(2)computer1.py

from mem import test

comp1 = test()

comp1.set(1,2)
comp1.printmem()


(3)computer2.py

from mem import test

comp2 = test()

comp2.set(3,4)
comp2.printmem()


现在,在交互式外壳上,我运行computer1.py,然后运行computer2.py。结果不是我想要的。当我运行computer2.py时,我希望comp2.printmem()打印{1:2,3:4},因为内存是全局的,它应该将{1:2}从comp1携带到comp2中,但是只打印{3: 4}。我怎样才能解决这个问题 ?

最佳答案

不,您不对@LuckyStarr。每个进程都有自己的内存片。当您运行python computer1.py时,Python解释器将加载computer1.py,这将导入mem.py。此调用的Python解释器使用一些内存,您的mem.py全局变量驻留在其中。 computer1.py完成执行后,该进程将干净退出,释放所有已使用的内存。

现在,当您运行computer2.py时,同样的事情再次发生,即computer2.py被加载到新的Python进程中,该进程获取新的内存,该内存又加载了mem.py,然后所有模块中创建的对象都将驻留在内存中在该Python进程的整个生命周期中。

mem.py没有其单独的内存份额。它是具有特定共享内存的Python进程,Python进程负责加载所有模块,包括mem.py和其他模块,例如computer1.py。并且由该Python进程的时间范围内的加载所创建的对象仅在进程运行之前才保留在内存中。

而且,无论如何,您都将computer1.pycomputer2.py作为单独的Python进程运行-它们只有在决定使用其他技术才能访问彼此的内存时,才可以访问彼此的内存。

07-24 17:33
查看更多