这里定义两个变量,变量a,变量b
b = {"title": "b_title"} a = b
此时输出a,则控制台输出{"title": "b_title"},这没什么争议性
接下来在a=b后面添加一组代码
b = {"title": "b_title"} a = b b["title"] = "b2_title" print(a)
按照经验代码由上往下执行,a=b,之后便没有对a重新赋值,此时b={"title": "b_title"},那么最后输出a应该也是{"title": "b_title"}
但是,最后结果如下:
主要是因为在对a进行赋值时,a=b,并不是将b的值赋给a,而是将b的内存地址指向a,因此,最终打印输出都会是最终b地址所对应的值。
使用a is b 可以查看对应的地址是否相等:
想解决这个问题,有几个简单函数都可以解决:
- 赋予b新的对象(暴力,适用性小)
b = {"title": "b_title"} a = b b = {} b["title"] = "b2_title"
- 调用dict自带的copy方法(只能浅拷贝,多层数据无法彻底解决)
b = {"title": "b_title"} a = b.copy() b["title"] = "b2_title"
- 导入copy实现深拷贝(copy带有浅拷贝copy方法,深拷贝可以解决多级问题)
import copy b = {"title": "b_title"} a =copy.deepcopy(b) b["title"] = "b2_title"
使用拷贝方法后查看对应地址关系:
值相等,地址不相等,所以之后修改b的值不会在影响到a: