所以基本上我知道浅拷贝和深拷贝有所不同。 我想了解的是,当我直接复制时:
d1 = {"a": "1"}
d2 = {}
d2 = d1
d1["b"] = "2"
del d1
print(d2)
这将输出返回为
{"a": "1", "b": "2"}
我的问题是为什么会发生这种情况,我该怎么做才能不让这种情况发生?我不希望d2在复制后更改。有没有不用copy.deepcopy()
的方法吗?
答案 0 :(得分:1)
不,您不能复制这样的对象。当您说d2 = d1时,您没有在复制d1,这将导致d2只是d1的另一个名称。如果您不希望它更新“ b”:“ 2”,请使用dict(d1)
d1={"a":1}
d2=dict(d1)
d1["b"]="2"
del d1
print(d2)
答案 1 :(得分:0)
使用.copy()创建d1的(浅表副本),如下所示:
d1 = {"a": "1"}
d2 = d1.copy()
d1["a"] = "2"
print(d2)
输出:
{'a':'1'}
原始代码无法按预期工作的原因是d1和d2都指向同一对象。
答案 2 :(得分:0)
通过分配d2 = d1
,它们都指向内存中的同一变量。您可以使用任何一个名称修改此值,因为它们都指向同一事物。
这不是副本,您只需将参考计数加1。通过使用del d1
,您会将引用计数递减1,但是d2
仍指向内存中的相同值。
要创建两个都是独立实体的副本,请使用d2 = d1.copy()
。