为什么当我完全不更新短途旅行时,短途旅行的谷数(特别是第一个值)会发生变化?我只是在更新“o”

Why does the vale of jaunts (specifically the 1st value) change when I'm not updating jaunts at all? I'm just updating the 'o'

提问人:Aditya 提问时间:2/8/2020 更新时间:2/8/2020 访问量:32

问:

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]]

这是我得到的短途旅行的值,当我甚至没有更新它时,第一个值已经改变了。

python-3.x 列表 for 循环 if 语句 赋值运算符

评论


答:

0赞 kederrac 2/8/2020 #1

当你将另一个变量(即列表)分配给一个变量时,你实际上是在创建对同一列表的新引用,所以当你在第二个变量中更改某些内容时,你也会在第一个变量中进行更改,因为两者都代表同一个列表,例如:

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

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

输出:

[2021, 0, 0, 2021]

在第一次迭代中,你的 for 循环中也发生了同样的事情,u 和 变量实际上都是一样的;当你在做的时候,你在做:new_cellojaunted[0]new_cell[0]=o[3]jaunted[0][0] = jaunted[0][3]

评论

0赞 kederrac 2/8/2020
使用副本:o = o.copy()