我正在使用 python 开发一个监控工具。 它有一个全局字典,所有主机作为键,它们的详细信息作为值。
目前我是这样做的:
host = hostname
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary
我的问题是:
这是将整个 hostDictionary 复制到全局键中还是只是引用它?
有更好的方法吗?
这样更快吗?
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}
这意味着:
您只是在
globalDictionary
的键中引用了hostDictionary
。如果你想要一个副本,请调用hostDictionary.copy()
或hostDictionary.deepcopy()
就像 hashcode55 所说的那样。“更好”取决于您的用例。但是,例如,您可以刚刚声明
hostDictionary = {'a': a, 'b': b, 'c': c}
。在 Python 解释器端执行您放在那里的操作速度较慢,因为(假设没有内置任何内容来优化您的原始示例)引擎将需要查找
引用的对象globalDictionary[host]
为每个操作写之前。
关于Python将一个字典复制为键值的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38491461/