2016-05-12 57 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

好吧,我发现如何,你可以用正确的方法来回答数组(列表),所以我可以接受你的答案是正确的吗?谢谢!你向我展示了道路。 –