¿Por qué cambia mi lista original?

Escribí una función SwapCities que puede intercambiar las entradas 3 y 4 en una lista.

Así que f.e. [0,1,2,3,4] debería convertirse en [0,1,2,4,3]. Esta función funciona perfectamente, pero extrañamente mi lista original también cambia y no la quiero.

Este es mi código:

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

Obtengo el siguiente resultado:

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

Como pueden ver, mi solución original ha cambiado, lo que no debería hacer.

No tengo ni idea de por qué sucede esto. Incluso cuando cambio el código para que los cambios se apliquen a una copia de la lista original, obtengo este resultado. ¿Podría alguien explicar lo que estoy haciendo mal?

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta