嗨,任何人都可以为我澄清这个问题。以下是代码示例:
def test1(d1):
d1_adj = d1.copy()
d1_adj.get(0)[0] *= 10
return d1_adj
d1 = {0: [10, 10]}
d1_adj = test1(d1)
print d1
{0: [100, 10]}
为什么d1字典会更新?如果我想保留原始输入字典的值并且只更新已复制字典的值,我怎么能遇到这个问题
感谢名单
答案 0 :(得分:5)
这是因为d.copy()是浅拷贝。您需要深层复制才能完成此任务。
from copy import deepcopy
然后
d1_adj = deepcopy(d1)
答案 1 :(得分:3)
copy
按照您的意图执行浅拷贝,而不是深拷贝。因此,它不会在键0处创建整个列表的副本,并会修改原始列表。
您可以通过遍历一次来对字典中的值进行手动深层复制。或者更好的是,除非对使用它有任何要求,否则您可以使用copy
模块进行perform deep copy(即copy.deepcopy
)操作。您需要做的就是更新test1函数,如下所示。
from copy import deepcopy
def test1(d1):
d1_adj = deepcopy(d1)
d1_adj.get(0)[0] *= 10
return d1_adj