首页 > 解决方案 > 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'}}

标签: python

解决方案


您的第二种方法创建一个引用字典,它们都指向同一个对象,即BASIC_SCHEME. 你想要的是每次都创建一个新的字典对象。您可以.copy()为此使用:

WORKLOAD_STRUCT ={k: BASIC_SCHEME.copy() for k in workload_names}

您应该了解的一些相关概念:


推荐阅读