从字典中删除项目在 Python [duplicate] 中无法按预期工作

Removing an item from a dictionary is not working as expected in Python [duplicate]

提问人:Mah3sh 提问时间:11/4/2023 更新时间:11/4/2023 访问量:36

问:

我正在尝试使用以下代码理解从字典中删除一个项目:

test_dict = dict()
test_dict[1] = [100, 200, 300]
test_list = test_dict[1]

print(f"Dict - Before: {test_dict}")
print(f"List - Before: {test_list}\n")

for item in test_list:
    print("Removing -", item)
    test_dict[1].remove(item)

print(f"\nDict - After: {test_dict}")
print(f"List - After: {test_list}\n")

这给了我以下输出:

Dict - Before: {1: [100, 200, 300]}
List - Before: [100, 200, 300]

Removing - 100
Removing - 300

Dict - After: {1: [200]}
List - After: [200]

当我从 test_dict[1] 中删除一个项目时,我对输出有点惊讶,但是同样的项目也从“test_list”变量中删除了。

此外,test_list中的项目迭代没有正确发生。它循环通过 100 和 300,不知道为什么不是 200 ?

我原以为test_dict[1]应该是空列表,而test_list应该不受影响,应该有[100,200,300]。 有什么想法吗?

python 列表 字典

评论

1赞 buran 11/4/2023
两者并引用相同的列表对象。test_dict[1]test_list
1赞 Tom Karzes 11/4/2023
您正在尝试在循环访问列表时从列表中删除项目。别这样。先制作一份副本。示例代码中还有一个共享列表,因此对它所做的任何更改都将反映在对它的所有引用中。
1赞 buran 11/4/2023
至于第二个问题 stackoverflow.com/q/1207406/4046632
0赞 Mah3sh 11/4/2023
谢谢。我以为当我用test_dict创建一个test_list时,两者都不会引用同一个对象。test_list应该获取test_dict[1]的副本,并且不应链接到同一列表

答: 暂无答案