更新dict值的字典

时间:2014-09-01 06:57:43

标签: python python-2.7

我已将B_cells值复制到A字典中。我正在尝试添加新元素A_cell但它影响B_cells

props = {'A_cells': {'t4drc_3': ['Path'],
            'tb4drc_1': ['Path']},

 'B_cells': {'t4drc_3': ['Path'],
             'tb4drc_1': ['Path']}
         }



props_dict['A_cells'] = props_dict['B_cell'].copy()


#Need to append data for A cells only
def append_in_dict_by_option(self, option, data):
        """Adding data in dictionary"""
        for key in props_dict[option].keys():
            self.props_dict[option][key].append(data)

所以我只期待A_cells中的输出,但它会影响B_cells。任何想法

{'A_cells': {'t4drc_3': ['Path', data],
                'tb4drc_1': ['Path', data]},

1 个答案:

答案 0 :(得分:0)

那是因为dict.copy返回了dict的浅表副本。这意味着你得到一个新的dict实例,但是dict中的元素是相同的。

props['A_cells'] is props['B_cells'] #returns False
props['A_cells']['tb4drc_1'] is props['B_cells']['tb4drc_1'] #returns True

因此,如果您向道具[' A_cells'] [' tb4drc_1']附加值,则更改将反映在道具[' B_cells']中[' tb4drc_1'] - 它们毕竟包含相同的列表实例。

更新:

要解决此问题,请更改

props_dict['A_cells'] = props_dict['B_cells'].copy()

from copy import deepcopy
props_dict['A_cells'] = deepcopy(props_dict['B_cells'])
相关问题