一 定义
引用:是由C++提出 C:指针
浅拷贝:拷贝了外层对象,内部的元素值拷贝了地址(引用)
深拷贝:拷贝了外层对象,内部对象也发生了拷贝
二 深浅拷贝的应用范围
1. list中的copy(),dict中的copy(),tuple中的copy()---浅拷贝
2. 切片操作都是浅拷贝
3. 赋值运算(拷贝地址)浅拷贝
4. 数据备份---系统容灾性质
三 深浅拷贝的作用
1. 浅拷贝:减少内存的使用
2. 深拷贝:数据备份
四 深浅拷贝的使用
1. 赋值语句是一种浅拷贝
2. 浅拷贝只拷贝了外层对象(外层对象地址不一样),但是内层对象(之拷贝了地址,因此地址一样的对象,是同一 个对象---内层对象共用)
3. 深拷贝拷贝了外层对象(外层对象地址不一样),也拷贝了内层对象(内层对象地址不一样)
五 示意图
六 代码示例
# l1=[1,2,3]
# l2=l1 # 浅拷贝
# l3=l1.copy() # 浅拷贝
#
# print(l1,l2,l3)
# print(id(l1),id(l2),id(l3))
# print(id(l1[0]),id(l2[0]),id(l3[0]))
# a=257
# b=257
# print(id(a),id(b))
l1=[[1,2,3],[4,5,6],[7,8,9]]
l2=l1.copy() # 外--拷贝 内层不拷贝
# print(l1)
# print(l2)
# print(id(l1),id(l2))
# print(id(l1[0]),id(l2[0]))
# l1[0][0]=99
# print(l1)
# print(l2)
import copy # 引入copy模块
l3=copy.deepcopy(l1) #
print(l1)
print(l2)
print(l3)
print(id(l1),id(l2),id(l3))
print(id(l1[0]),id(l2[0]),id(l3[0]))
l1[0][0]=99
print(l1)
print(l2)
print(l3)