我曾尝试在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加载的预期字典。