Python无意中删除了其他字典中的键



x_copy上使用del.pop()时,该操作也会神奇地应用于x。即删除两个字典中的关键字。

示例代码:

x = {
"key1": 0,
"key2": 0,
}
x_copy = x
x_copy.pop("key1")
print(f"x =      {x}")
print(f"x copy = {x_copy}")

此代码应该只删除x中的键,但这两个字典中的键都丢失了。

实际输出:

>>> x =      {'key2': 0}
>>> x copy = {'key2': 0}

预期输出

>>> x =      {'key1': 0, 'key2': 0}
>>> x copy = {'key2': 0}

如果我用del:替换.pop(),也会发生同样的情况

x_copy = x
x_copy.pop("key1")

为什么会发生这种情况?

Python 3.10

x_copy = x为您提供了两个指向内存中同一位置的变量,所有修改其中一个的操作都将反映在另一个中。您需要在内存中实际创建另一个对象(例如使用x.copy()(,然后可以将其视为独立副本。https://moonbooks.org/Articles/How-to-copy-a-dictionary-in-python-/

没有进行浅层复制

x.copy()

由@matszwecja 回答

相关内容

最新更新