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

questionAnswers(2)

yourAnswerToTheQuestion