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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage