我正在使用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]引用的对象。

10-07 15:15