2016-05-12 3 views
0

Ich habe Probleme mit der Arbeit mit diesem Array mit einem Wörterbuch. Ich habe den Code so klein wie möglich gemacht, damit das Problem leichter zu sehen ist, aber ich arbeite natürlich mit einem größeren Array.Daten repliziert in unberührten Array Python

Ich möchte nur mit zwei Kopien des Arrays arbeiten und ändern Sie ihre Werte für meine Bedürfnisse, von denen jede für die verschiedenen Kopie des Arrays unterschiedlich sein kann. Also, ich arbeite mit einer der Kopie, aber ich verstehe einfach nicht, warum ich die Operation auch in der anderen Kopie des Arrays repliziert bekomme.

Der Code:

#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

Antwort

2

Sie haben keine Kopie der dict erstellen, nur einen weiteren Hinweis auf den gleichen. kopieren Um wirklich können Sie einfach tun:

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

Und für eine Liste:

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

So Ihr Beispiel würde so sein müssen:

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

Aber es ist ein Array, Kopie() funktioniert nicht mit Arrays. Ist es das gleiche Verhalten bei Arrays? –

+0

Arrays gibt es in Python nicht, die häufigsten ähnlichen Dinge sind Listen und Dicts. Ich habe hinzugefügt, wie man eine Liste in meine Antwort kopiert. –

+0

Ok, ich habe herausgefunden, wie, können Sie mit der richtigen Methode für Arrays (Listen) antworten, damit ich Ihre Antwort als die richtige akzeptieren kann? Vielen Dank! Du hast mir den Weg gezeigt. –