Dlaczego zmienia się moja oryginalna lista?
Napisałem funkcję SwapCities, która jest w stanie zamienić wpisy 3 i 4 na liście.
Więc f.e. [0,1,2,3,4] powinno stać się [0,1,2,4,3]. Ta funkcja działa doskonale, ale dziwnie moja oryginalna lista również się zmienia, czego nie chcę.
To jest mój kod:
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
Otrzymuję następujący wynik:
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?!)
Jak widać moje oryginalne rozwiązanie zmieniło się, czego nie powinno robić.
Nie mam pojęcia, dlaczego tak się dzieje. Nawet jeśli zmienię kod tak, że zmiany zostaną zastosowane do kopii oryginalnej listy, otrzymam ten wynik. Czy ktoś może wyjaśnić, co robię źle?
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