python的深浅拷贝

发布时间 2023-09-08 14:21:57作者: hanyingshuo

通过id内存地址发生变化

print()打印出来的变化,这种现象就是

’拷贝‘,’浅拷贝‘,’深拷贝‘

拷贝(赋值)

lt = [1,2,3]
lt = lt

lt.append(4)
print(lt)
# 因为列表是可变类型,所以lt的值变化,lt2的值也跟着变化
print(lt2)

浅拷贝copy.copy()

浅拷贝,拷贝出来的值内存地址都一样,但此时需要引用库

一般情况下L2拷贝不来的值,不会随着L1的变化而变化

lt2没有变化的情况
import copy
lt =[1,2,3]
lt2 = copy.copy(lt)

lt.appent(4)
print(lt)===>[1,2,3,4]		
print(lt2)==>[1,2,3]
lt2变化的情况
import copy
lt = [1,2,3,[4,5,6]]
lt2 = copy.copy(lt)

lt(-1).appent(7)
print(lt)
print(lt2)

深拷贝copy.deepcopy()

深拷贝中的拷贝对象,可变类型地址改变,不可变类型不改变

import copy
lt = [1,2,3,[4,5,6]]
lt2 = copy.deepcopy(lt)

lt(-1).appent(7)
print(lt)
print(lt2)

不管怎样深拷贝的拷贝对象都不会改变

牢记:拷贝/浅拷贝/深拷贝 只针对可变数据类型

总结

拷贝:当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2就变化;lt内的不可变类型变化,lt2就变化

简单的赋值

浅拷贝:当lt2为lt的浅拷贝对象时,lt内可变类型变化,lt2就变化;lt内的不可变化类型变化,lt2就不变化

copy.copy()

深拷贝:当lt2为lt深拷贝对象时,lt内的可变类型变化,lt2就不变化;lt内的不可变类型变化,lt2就不变化

copy.deepcopy()

毫无用处,面试经常用(要牢记!)