以下是我的变量:
以下是代码:
for neighbor in adjacencyList[node]:
if color in availableColorsForNode[neighbor]:
availableColorsForNode[neighbor].remove(color) #problem is here somehow
我期待:
但我得到了(其中1被删除):
为什么会这样? 当我进行如下的简单测试时,我得到预期的输出:
test = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
test[4].remove(1)
print(test)
答案 0 :(得分:3)
我假设您将测试设置得更多或更像
lst = [1, 2, 3]
test = [lst, lst, lst, lst, lst] # or: test = [lst] * 5
test[4].remove(1)
print(test)
test
现在包含对相同列表的引用(而不是列表的相同副本)。如果您在其中任何一个上致电.remove
(例如test[4].remove(1)
),则更改将反映在所有这些内容中。因为test
中的所有项目仍然引用相同的列表lst
。
以下是关于如何解决此问题的四种不同建议(如果您的列表包含不需要的不可变数据类型deepcopy
);我建议你选择其中一个,不要混合它们;这里的代码只是为了展示可能性......:
from copy import copy, deepcopy
lst = [1, 2, 3]
test = [list(lst), lst[:], copy(lst), deepcopy(lst)]
test[2].remove(1)
print(test)
如果你想重复这些,你可以这样做:
test = [lst[:] for _ in range(5)]