python - Python字典替换值
问题描述
我正在尝试在 python 中测试字典词典。
第一种初始化方式有效,而第二种方式替换值。我不懂为什么。
#!/usr/bin/env python
BASIC_SCHEME = {'name': None}
workload_names=['a', 'b']
WORKLOAD_STRUCT ={k: {} for k in workload_names}
print ("without initialisation ", WORKLOAD_STRUCT)
WORKLOAD_STRUCT['a']['name'] = 'a'
WORKLOAD_STRUCT['b']['name'] = 'b'
print(WORKLOAD_STRUCT)
WORKLOAD_STRUCT = None
WORKLOAD_STRUCT ={k: BASIC_SCHEME for k in workload_names}
print ("with initialisation ", WORKLOAD_STRUCT)
WORKLOAD_STRUCT['a']['name'] = 'a'
WORKLOAD_STRUCT['b']['name'] = 'b'
print(WORKLOAD_STRUCT)
这是我的控制台的结果。
python test.py
without initialisation {'a': {}, 'b': {}}
{'a': {'name': 'a'}, 'b': {'name': 'b'}}
with initialisation {'a': {'name': None}, 'b': {'name': None}}
{'a': {'name': 'b'}, 'b': {'name': 'b'}}
解决方案
您的第二种方法创建一个引用字典,它们都指向同一个对象,即BASIC_SCHEME
. 你想要的是每次都创建一个新的字典对象。您可以.copy()
为此使用:
WORKLOAD_STRUCT ={k: BASIC_SCHEME.copy() for k in workload_names}
您应该了解的一些相关概念:
copy
对比deepcopy
- (
defaultdict
)[ https://docs.python.org/3.3/library/collections.html]
推荐阅读
- linux - 可执行 ELF 中的 PT_INTERP 段顺序
- c - 在计算浮点数组的大小时,它在 C 中打印大小为 2 而不是 41
- python-3.x - 插槽右键单击菜单操作不起作用
- java - 可以在 Netty 中压缩请求吗?
- json - Gatling - 在静态 JSON 内容中连接 JSON 文件
- c - 在c中使用scanf恢复字符
- linux - l3fwd 中的数据包捕获
- angular - 算子函数
缺少“可观察”类型的以下属性:_isScalar、源、运算符、 - bash - 执行位于子文件夹中的 python 代码
- java - 具有在另一个类中计算的 xy 数据的简单 Java Plot