2014-09-01 101 views
0

我已將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]}, 

回答

0

這是因爲dict.copy返回字典的淺表副本。這意味着你得到一個新的字典實例,但字典中的元素是相同的。

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 2014-09-01 07:06:54

+0

我我的答案更新,對不起,不包括在第一時間修復。 – 2014-09-01 07:07:58

+0

Thx提供輸入 – user765443 2014-09-01 07:19:42