Почему изменяется значение jaunts (в частности, 1-го значения), когда я вообще не обновляю jaunts? Я просто обновляю 'o' - PullRequest
1 голос
/ 08 февраля 2020
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]]

Это значение, которое я получаю, 1-е значение изменилось, когда я даже не обновил его.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

когда вы присваиваете переменной другую переменную, которая является списком, вы фактически создаете новую ссылку на тот же список, поэтому, когда вы изменяете что-то во второй переменной, вы изменяете также в первой переменной, потому что обе представляют один и тот же список, например:

first_list = [2020, 0,0, 2021]
second_list = first_list

second_list[0] = first_list[3]
print(first_list)

вывод:

[2021, 0, 0, 2021]

то же самое, что происходит в вашем случае для l oop на первой итерации, ваши переменные new_cell и o на самом деле оба одинаковые jaunted[0]; когда вы делаете new_cell[0]=o[3] вы делаете: jaunted[0][0] = jaunted[0][3]

0 голосов
/ 08 февраля 2020

В строке 9

new_cell [0] = o [3]

вы меняете точки.

...