Warum ändert sich meine ursprüngliche Liste?
Ich habe eine Funktion SwapCities geschrieben, die die Einträge 3 und 4 in einer Liste vertauschen kann.
Also f.e. [0,1,2,3,4] sollte zu [0,1,2,4,3] werden. Diese Funktion funktioniert einwandfrei, aber seltsamerweise ändert sich meine ursprüngliche Liste auch, was ich nicht will.
Das ist mein Code:
def SwapCities(solution):
n = 3##randint(0,NumberOfCities-1)
m = 4##randint(0,NumberOfCities-1)
result = solution
temp1 = solution[n]
temp2 = solution[m]
result[n] = temp2
result[m] = temp1
return result
print "Start"
IncumbentSolution = list(x for x in range(0,NumberOfCities))
print IncumbentSolution
print "After swap" NewSolution = SwapCities(IncumbentSolution)
print NewSolution
print "Original solution"
print IncumbentSolution
Ich erhalte folgendes Ergebnis:
How many cities?
8 Start [0, 1, 2, 3, 4, 5, 6, 7]
After swap [0, 1, 2, 4, 3, 5, 6, 7]
Original solution [0, 1, 2, 4, 3, 5, 6, 7] (why did this change?!)
Wie Sie sehen können, hat sich meine ursprüngliche Lösung geändert, was nicht der Fall sein sollte.
Ich habe keine Ahnung, warum das passiert. Auch wenn ich den Code so ändere, dass die Änderungen an einer Kopie der ursprünglichen Liste vorgenommen werden, erhalte ich dieses Ergebnis. Könnte jemand erklären, was ich falsch mache?
IncumbentSolution = list(x for x in range(0,NumberOfCities))
print "Start"
print IncumbentSolution
print "After swap"
tmpsolution = IncumbentSolution
NewSolution = SwapCities(tmpsolution)
print NewSolution
print "Original solution"
print IncumbentSolution