拷贝(赋值)
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
毫无作用,面试经常问