即使复制列表,附加也会覆盖值

HFu*_*her 0 python

我有一个字典,其中包含每个键的列表,但是当我尝试将新值附加到键中的列表时,它会覆盖该列表中的所有值(显然是引用问题)困扰我的是我尝试过的我可以在下面的StackOverflow上找到所有不同的建议:

  1. 使用[:]创建列表的副本
  2. 使用复制和深度复制

但我的结果仍然是一样的,下面是受影响的代码,如果有人可以阐明我的情况,我会非常感激!

temp = defaultdict(list)
for vert in row:
    if vert > 0:
        temp[vert].append(row.index(vert))
Run Code Online (Sandbox Code Playgroud)

这是"vanilla"代码,我没有使用任何方法来复制列表

Mar*_*ers 5

什么都没有被覆盖.您只是一次又一次地重新添加相同的索引,即具有该值的第一个索引vert:

>>> row = [5, 5, 5]
>>> for vert in row:
...     print(row.index(vert))
... 
0
0
0
Run Code Online (Sandbox Code Playgroud)

该值首先5在索引处找到0,因此row.index(5)始终返回0,而不是12稍后的迭代.

如果要添加所有索引,请使用以下enumerate()函数:

for idx, vert in enumerate(row):
    if vert > 0:
        temp[vert].append(idx)
Run Code Online (Sandbox Code Playgroud)

它允许您跟踪循环中的迭代.