¿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