深复制,浅复制解析
深复制,浅复制
会出现可变序列类型中出现
浅复制
:复制父对象,不会复制对象内部的子对象(引用的对象
),
深复制
:复制父对象和子对象
深复制需要先导入copy模块,然后才能使用
import copy
copy.deepcopy(list)
列表在嵌套一个有名字的列表时,更像是在引用这个对象,例如:
a = [1,2,3]
b = [a,4,5,6]
在b输出显示时,系统把会a解析成列表显示出来:
print(b)
>> [[1,2,3],4,5,6]
但系统记录的始终是 b = [a,4,5,6] ,a只是一个引用的对象。
所以在复制时, a 也是作为一个可引用的对象复制给 b ,
可以理解为 a 只是一个快捷方式,再怎么复制也只是复制一个快捷方式而已,
这就是所为的浅复制。
而深复制呢,就是把 a 的内容 完完全全 复制到一个新的列表里面,
换成另外一个思路就是:
深复制时,系统把a这个快捷方式所指的文件,复制给了另外一个对象。
总结:
浅复制:只复制被引用的对象(快捷方式)
深复制:复制被引用对象的内容(文件)
示例:
import copy
a = [1,2,3,4,['a','b']] # 赋值操作
b = a # 赋值操作
c = a.copy() # 浅复制操作
d = copy.copy(a) # 浅复制操作
e = copy.deepcopy(a) # 深复制操作
a.append(5)
a[4].append('c')
print(a) [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(b) [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(c) [1, 2, 3, 4, ['a', 'b', 'c']]
print(d) [1, 2, 3, 4, ['a', 'b', 'c']]
print(e) [1, 2, 3, 4, ['a', 'b']]