无法分配全局字典参数



我曾尝试在pickle对象中加载数据文件,但当它加载时,它被分配给了新的参数,引用内存不同,我找不到将其分配给全局字典参数的方法

模块.py

import pickle
path2file='c:file'
Objects={}

def loadPickle():
global Objects
print(id(Objects))  #xxx111
with open (path2file, 'rb') as fp:
Objects = pickle.load(fp)
print(id(Objects)) #xxx222
# Objects= copy.copy(x)

主.py


from module import *
loadPickle()
print(id(Objects))  #xxx111

您正在为名称Objects分配一个不同的字典,即从pickle文件加载的字典。

由于名称现在将引用到不同的词典,id(Objects)将不同,并对应于第二个词典,而不是第一个词典。

现在,当您导入模块时,module.Objects会加载一次(并且在loadPickle更改之前(到全局范围中。

当您在loadPickle中更改它时,它只在模块module的级别上更改,而不在全局范围内更改。

然而,当你这样做时:

import module
module.loadPickle()
print(id(module.Objects))

它应该做你想做的事。

另一种方法可以是从函数loadPickle中创建全局变量,而它不存在于全局范围中(只需从module中删除初始化Objects = {}(。在这种情况下,变量将包含从pickle加载的预期字典。

最新更新