将字典传递给函数而不改变先前处理的值

Pass dictionary to function without altering previously processed values

我正在尝试使用函数更改词典列表中的特定条目。但是,我不能在不更改所有条目的情况下更改一个条目。我已经尝试了我能想到的 dict() 和 .copy() 的所有组合,但我无法让它工作。我该如何解决这个问题?

a = dict(population[10][2])
b = a.copy()
print(a == b)
print(route_length(a))
print(route_length(b))

正确

(3,0,1,1,1,1,2,2,0,0,2,0,5,4,0,1,0,0)

(3,0,1,1,1,1,2,2,0,0,2,0,5,4,0,1,0,0)

c = dict(mutate(a))
print(route_length(c))

(2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, 0, 6, 4, 0, 2, 0, 0)

d = dict(mutate(b))
print(route_length(c))
print(route_length(d))

(3,0,0,0,0,2,1,0,1,0,3,0,7,3,0,3,0,0)

(3,0,0,0,0,2,1,0,1,0,3,0,7,3,0,3,0,0)

c == d

正确

我不期待 'mutate' 的任何具体答案,只是 'c' 和 'd' 不同。 'mutate' 随机重新排列了一些列表,我的打印输出给出了不同列表的长度。我一直在用它来表明正在发生某些事情,并且每次都在发生不同的事情。

a.copy() 创建一个 浅拷贝 - 将创建一个新的字典对象并将对现有字典中对象的引用插入到新字典中。

你需要的是深度复制,它递归地创建一个包含所有对象副本的新字典:

import copy
a = dict(population[10][2])
b = copy.deepcopy(a)

现在 b 中的任何修改都不会反映在 a 的原始副本中。