话不都说直接开始...
上图将a
赋值
给b ,其中可以看出来b和a的值和地址一样,
当修改数据,源数据a也会改变,为了保存源数据,所以python就有了
浅拷贝
和
深拷贝
在拷贝之前,要引入了copy模块
以下浅拷贝和深拷贝可以看成
外层
和
内层
浅拷贝:
b浅拷贝a --- b = copy.copy(a)
浅拷贝的地址指向:
1.a如果是可变类型,e.g. 列表、字典 、集合 则a,b指向不同的地址
2.a如果是不可变类型,e.g. 元组、字符串、数字 则a指向b的地址
a中外层拷贝,修改外层元素,b中的外层不会变化 ,上面2不能修改外层元素
a中内层不拷贝,修改内层元素,b中的内层做同样的变化
深拷贝:
b深拷贝a --- b = copy.deepcopy(a)
深拷贝地址指向:
1.a如果是可变类型,e.g. 列表、字典 、集合 则a,b指向不同的地址
2.a如果是不可变类型,e.g. 元组、字符串、数字 :
a中元素是可变类型 则a,b指向不同的地址
a中元素是不可类型 则a,b指向同一个地址
上面2中第二点不能修改元素,1和2中的第一点在a和b中任意一个修改元素值都不会影响另一个
总结:
赋值在修改内外层都会改变源数据的值,浅拷贝在修改外层元素时同时不会更改源数据外层的值,内层修改元素则可以更改源数据内层的值,深拷贝在修改元素时不会更改源数据的值
希望能给你带来帮助,喜欢的点个赞哦!