[英]can't assign the global dictionary parameter
我试图在pickle object中加载数据文件,但是当它加载时,它分配给新参数,引用memory不同,我找不到将它分配给全局字典参数的方法
模块.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)
主文件
from module import *
loadPickle()
print(id(Objects)) #xxx111
您正在为名称Objects
分配一个不同的字典 - 您从 pickle 文件加载的字典。
由于名称现在将引用不同的字典,因此id(Objects)
将不同并且对应于第二个字典而不是第一个字典。
现在,当您导入模块时, module.Objects
被加载一次(并且在loadPickle
更改之前)到全局scope。
当您在loadPickle
中更改它时,它仅在模块module
级别更改,而不是在全局 scope 中更改。
但是,当您这样做时:
import module
module.loadPickle()
print(id(module.Objects))
它应该做你想做的事。
另一种方法可能是从 function loadPickle
中创建全局变量,而全局变量 scope 中不存在(只需删除初始化Objects = {}
表单module
)。 在这种情况下,变量将包含从 pickle 加载的预期字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.