数据在未触及的数组python

时间:2016-05-12 11:31:21

标签: python arrays dictionary

我在处理包含字典的数组时遇到了麻烦。我尽可能小地编写代码,这样可以更容易地看到问题,但当然我正在使用更大的数组。

我只想操作数组的两个副本并根据我的需要更改它们的值,每个数组的不同副本可以不同。因此,我使用其中一个副本进行操作,但我只是不明白为什么我也要将操作复制到数组的另一个副本中。

代码:

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

1 个答案:

答案 0 :(得分:2)

您没有创建dict的副本,只是对同一个dict的另一个引用。 要真正复制它,您可以简单地执行此操作:

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]