深浅拷贝

发布时间 2023-09-06 19:38:07作者: 陈hao

拷贝(赋值)

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

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

浅拷贝

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

lt.append(4)
print(lt)    #[1,2,3,4]
print(lt2)    #[1,2,3]

#lt2变化的情况
lt = [1000,2000,3000,[4000,5000,6000]]
print('id(lt[0])',id(lt[0]))
print('id(lt[1])',id(lt[1]))
print('id(lt[2])',id(lt[2]))
print('id(lt[3])',id(lt[3]))
print('*'*50)
lt2 = copy.copy(lt)
print('id(lt[0])',id(lt[0])) print('id(lt[1])',id(lt[1]))
print('id(lt[2])',id(lt[2]))
print('id(lt[3])',id(lt[3]))
print('*'*50)

lt.append(4)
print(lt)    #[1,2,3,[4,5,6],4]
print(lt2)    #[1,2,3,[4,5,6]]

lt[-1].append(7)
print(lt)   #[1,2,3,[4,5,6,7]]
print(lt2)    #[1,2,3,[4,5,6,7]]

深拷贝

import copy
lt = [1000,2000,3000,[4000,5000,6000]]
print('id(lt)',id(lt))
print('id(lt[0])',id(lt[0]))
print('id(lt[1])',id(lt[1]))
print('id(lt[2])',id(lt[2]))
print('id(lt[3])',id(lt[3]))
print('*'*50)
lt2 = copy.deepcopy(lt)
print('id(lt2)',id(lt2))
print('id(lt[0])',id(lt[0])) print('id(lt[1])',id(lt[1]))
print('id(lt[2])',id(lt[2]))
print('id(lt[3])',id(lt[3]))
print('*'*50)

lt.append(4)
print(lt)    #[1000,2000,3000,[4000,5000,6000],4]
print(lt2)    #[1000,2000,3000,[4000,5000,6000]]

lt[-1].append(7)
print(lt)   #[1,2,3,[4,5,6,7]]
print(lt2)    #[1,2,3,[4,5,6,7]]

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

拷贝:当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化
#简单的赋值


浅拷贝:当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化
#copy.copy()   可变数据的类型的内置方法.copy()



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


毫无作用,面试经常问