Por que minha lista original muda?
Eu escrevi uma função SwapCities que é capaz de trocar as entradas 3 e 4 em uma lista.
Então f.e. [0,1,2,3,4] deve se tornar [0,1,2,4,3]. Esta função funciona perfeitamente, mas estranhamente minha lista original também muda, o que eu não quero.
Este é o meu 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
Eu obtenho o seguinte 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 você pode ver minha solução original mudou o que não deveria fazer.
Eu não tenho ideia de por que isso acontece. Mesmo quando eu mudo o código para que as alterações sejam aplicadas a uma cópia da lista original, recebo este resultado. Alguém poderia explicar o que estou fazendo errado?
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