深浅拷贝(暂时)
深浅拷贝
0. 可变数据类型 '='
共用一个地址,同生共死
1 浅拷贝 (copy.copy/切片操作)
1.1 对于可变数据类型(列表 字典)
只自己创建了最外层结构 内层数据依旧是相同地址,相同可变数据类型依然同生共死
import copy
l = [1,2,[1,2]]
l1 = l[:]
l2 = copy.copy(l)
print (id(l),id(l1),id(l2))
## 4349257224 4349277768 4349276744 各不相同
print (id(l[-1]),id(l1[-1]),id(l2[-1]))
## 4357515912 4357515912 4357515912 第二层地址相同
1.2 对于不可变数据类型 (数字,字符串,tuple)
tuple夹杂可变数据类型,地址相同,一变多变
深拷贝 (copy.deepcopy())
深拷贝理论上来说怎么变也影响不了copyer的数据类型,不过为了节省内存空间,对于不可变数据类型,还是指向相同地址的,但是依旧可以看成没有影响,因为即使可变数据类型相同地址,改变其一也相当于指向新的地址,对之前的数据没有影响
由浅到深 | 最外层 | 内层 |
---|---|---|
'=' | 地址相同 | 地址相同 |
浅拷贝 | 地址不同 | 地址相同 |
深拷贝 | 地址不同 | 地址不同 |
地址相同的可变数据类型:一变多变
另附图解