2017-12-18 9 views
0

ich eine Klasse hava wieMeine Variable mit Klasse ändert, die als Attribut Klasse gegeben

class Gate(): 
    def __init__(self, lst): 
     self.arr = lst 
     self.fill() 

    def get_arr(self): 
     return self.arr 

    def set_arr(self, index1, index2, value): 
     self.arr[index1][index2] = value 

    def fill(self): 
     for i in range(len(self.arr)): 
      self.arr[i].append(randrange(2)) 

I Klasse erschaffe mit „gate_list“ attiribute. Wenn ein neues Objekt erstellt wird, fügt es der Liste des Objekts 1 und 0 hinzu.

Bis jetzt ist alles ok. Aber mit der Objektliste ändert sich auch meine Variable "gate_list" zu sehr.

Array = Gate(gate_list) 
print(Array.get_arr()) 
print(gate_list) 

Ausgabe

[['a', 1], ['b', 0], ['c', 0], ['z', 1], ['d', 1]] 
[['a', 1], ['b', 0], ['c', 0], ['z', 1], ['d', 1]] 

Wo ist meine Schuld?

+0

... weil sie * * die gleiche Liste sind. –

Antwort

1

hat einen Verweis auf gate_list, die an den Konstruktor übergeben wird. Daher werden sich alle Mutationen von self.arr auch ändern gate_list. Verwenden Sie stattdessen eine Kopie von gate_list zu Gate passieren:

import copy 

Array = Gate(copy.deepcopy(gate_list)) 
+0

es funktioniert, vielen Dank! –

Verwandte Themen