在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 回答