[英]Python: Removing an integer in a list within a list is removing the integer on all sublists lists
這是我的變量:
這是代碼:
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)
我認為您更多地或像
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)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.