start = [2020,0,0,2020]
jaunts = [[2020,0,0,2021],[2021,0,0,2022],[2022,0,0,2023],[2020,1,1,2023],[2021,0,0,2023]]
def gridneighbors(start,jaunts):
neigh = []
for o in jaunts:
new_cell = o
if start[0]==o[0] and (start[1] == o[1] and start[2] == o[2]):
new_cell[0]=o[3]
neigh.append(o)
elif start[3]==o[3] and (start[1] == o[1] and start[2] == o[2]):
o[3]=o[0]
neigh.append(o)
print(jaunts)
return neigh
print(gridneighbors(start,jaunts))
output:
[[2021, 0, 0, 2021], [2021, 0, 0, 2022], [2022, 0, 0, 2023], [2020, 1, 1, 2023], [2021, 0,
0, 2023]]
Este es el valor de las salidas que estoy recibiendo, el primer valor ha cambiado cuando ni siquiera lo actualicé.
2 respuestas
Cuando asigna a una variable otra variable que es una lista, en realidad está creando una nueva referencia a la misma lista, por lo que cuando cambia algo en la segunda variable también está cambiando en la primera variable porque ambos representan la misma lista, por ejemplo:
first_list = [2020, 0,0, 2021]
second_list = first_list
second_list[0] = first_list[3]
print(first_list)
Salida:
[2021, 0, 0, 2021]
Lo mismo que sucede en su bucle for en la primera iteración, sus variables new_cell
y o
son en realidad las mismas jaunted[0]
; cuando estás haciendo new_cell[0]=o[3]
estás haciendo: jaunted[0][0] = jaunted[0][3]
En la línea 9
nueva_célula [0] = o [3]
Estás cambiando de excursión.
Preguntas relacionadas
Nuevas preguntas
python-3.x
Para preguntas sobre la programación de Python que son específicas de la versión 3+ del lenguaje. Use la etiqueta [python] más genérica en todas las preguntas de Python, y solo agregue esta si su pregunta es específica de la versión. Utilice las etiquetas [python-2.x] para las preguntas de Python 2.