import copy lists={} test=[‘s1‘,‘s2‘,‘s3‘] data = {‘value‘: ‘‘,} for i in range(2): lists[i] = data for j in range(2): lists[j][‘value‘]=test[j] print(lists)
Connected to pydev debugger (build 182.5107.22) {0: {‘value‘: ‘s2‘}, 1: {‘value‘: ‘s2‘}}
import copy lists={} test=[‘s1‘,‘s2‘,‘s3‘] data = {‘value‘: ‘‘,} for i in range(2): lists[i] = copy.deepcopy(data) for j in range(2): lists[j][‘value‘]=test[j] print(lists)
Connected to pydev debugger (build 182.5107.22) {0: {‘value‘: ‘s1‘}, 1: {‘value‘: ‘s2‘}}
lists[i] = data 在执行 赋值时, 每一次调用的都是 data变量的源地址,并没有改变地址。
所以我们在下面动态的改变值的时候,就会出现改变一个值,所有结果全部改变。
类似于python的浅拷贝和深拷贝。 所以只需要将其变为深拷贝即可。copy.deepcopy().
原文:https://www.cnblogs.com/zhaoxianxin/p/13262324.html