2014-09-01 5 views
0

Я скопировал B_cells значение в словарь A. Я пытаюсь добавить новый элемент A_cell но это влияет B_cells такжеОбновление dict of dict value

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]}, 

ответ

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'] - они содержат один и тот же список в конце концов.

UPDATE:

Чтобы это исправить, изменить

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

в

from copy import deepcopy 
props_dict['A_cells'] = deepcopy(props_dict['B_cells']) 
+0

Могу ли я исправить этот вопрос – user765443

+0

Я обновил свой ответ, извините за не включая исправление в первую очередь , –

+0

Thx для обеспечения ввода – user765443

Смежные вопросы