我正在使用python中的监视工具。
它有一个全局字典,其中所有主机均为键,其详细信息为值。
目前,我这样做是这样的:
host = hostname
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary
我的问题是:
这是将整个hostDictionary复制到global的密钥中还是只是引用它?
有一个更好的方法吗?
这样更快吗?
globalDictionary[host]["a"] = a
globalDictionary[host]["b"] = b
globalDictionary[host]["c"] = c
最佳答案
我从Python CLI获得此信息:
>>> a = {}
>>> b = {}
>>> c = {}
>>> a["foo"] = 1
>>> b = a
>>> c = a.copy()
>>> b["bar"] = 2
>>> a
{'foo': 1, 'bar': 2}
>>> b
{'foo': 1, 'bar': 2}
>>> c
{'foo': 1}
意思是:
您只是在
hostDictionary
的键中引用globalDictionary
。如果要复制,请像hashcode55所说的那样调用hostDictionary.copy()
或hostDictionary.deepcopy()
。“更好”取决于您的用例。但是,例如,您可能刚刚声明了
hostDictionary = {'a': a, 'b': b, 'c': c}
。从Python解释器的角度来看,这样做很慢,因为(假设没有内置的东西可以优化原始示例),引擎在编写之前需要为每个操作查找
globalDictionary[host]
引用的对象。