2016-05-12 29 views
0

我在處理包含字典的數組時遇到了問題。我儘可能小的代碼,這樣可以更容易地看到問題,但我正在使用更大的陣列,當然。在未修改的數組中複製的數據python

我只是想操作兩個數組的副本,並根據我的需要更改它們的值,其中每個副本的數組可能都不相同。所以,我使用其中一個副本進行操作,但我不明白爲什麼我要在陣列的另一個副本中獲取操作。

代碼:

#set of data 
value_indicador = [{'value': 98.0}] 
value_indicador_positivo = value_indicador 
value_indicador_negativo = value_indicador 

for x in range(0, len(value_indicador_negativo)): 

    value_indicador_negativo[x]['value'] = value_indicador_negativo[x]['value']*0.95 

#what I'd like to get 
value_indicador = [{'value': 98.0}] 
value_indicador_positivo = [{'value': 98.0}] 
value_indicador_negativo = [{'value': 93.1}] 

#what I'm actually getting 
value_indicador = [{'value': 93.1}] 
value_indicador_positivo = [{'value': 93.1}] 
value_indicador_negativo = [{'value': 93.1}] 
+0

的http:// stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python – Esref

回答

2

你沒有創建字典的一個副本,只是一個參照相同。 要真正複製它,你可以簡單地這樣做:

dict_a = {'value': 98.0} 
dict_b = dict_a.copy() 

而對於一個列表:

list_a = ['value', 98.0] 
list_b = list_a[:] # This is called slicing, you simply take all the content from the other list 

所以,你的例子就是需要是這樣的:

value_indicador = [{'value': 98.0}] 
value_indicador_positivo = value_indicador 
value_indicador_negativo = [d.copy() for d in value_indicador] 
+0

但它是一個數組,copy()不能與數組一起工作。它是與數組相同的行爲? –

+0

數組在Python中不存在,最常見的類似事情是列表和字典。我添加了如何在我的答案中複製列表。 –

+0

好吧,我發現如何,你可以用正確的方法來回答數組(列表),所以我可以接受你的答案是正確的嗎?謝謝!你向我展示了道路。 –