Почему мой первоначальный список меняется?

Я написал функцию SwapCities, которая может поменять местами записи 3 и 4 в списке.

Так, например [0,1,2,3,4] должно стать [0,1,2,4,3]. Эта функция работает отлично, но как ни странно мой оригинальный список также меняет то, чего я не хочу.

Это мой код:

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

Я получаю следующий результат:

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?!)

Как видите, моё оригинальное решение изменилось, чего не должно было быть.

Я понятия не имею, почему это происходит. Даже когда я изменяю код таким образом, что изменения применяются к копии исходного списка, я получаю этот результат. Может кто-нибудь объяснить, что я делаю не так?

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