若a = dict(),令 b = a,执行b.update({"x":1}),a亦改变,为何,如何避免
dict_a = dict() dict_b = dict_a #直接赋值 dict_b.update ({"name":"lisi"}) print(dict_a,dict_b) print(id(dict_a),id(dict_b))
输出结果:
{'name': 'lisi'} {'name': 'lisi'} 4074228 4074228 Process finished with exit code 0
一摸一样,数据和地址都跟着一起改变
解决方法:使用拷贝
a = {"name":"zhangsan","age":18,} b = copy.deepcopy(a) b["name"] = "lisi" print(a,b) print(id(a),id(b))
输出结果:
{'name': 'zhangsan', 'age': 18} {'name': 'lisi', 'age': 18} 4074108 43224196 Process finished with exit code 0
PS:深浅拷贝对于只有一层的数据无差别,对于有嵌套的数据会有差别。浅拷贝只复制第一层。