python基础 22 专题 深浅拷贝

120 阅读1分钟

一 定义

引用:是由C++提出 C:指针 
浅拷贝:拷贝了外层对象,内部的元素值拷贝了地址(引用) 
深拷贝:拷贝了外层对象,内部对象也发生了拷贝 

二 深浅拷贝的应用范围

1. list中的copy(),dict中的copy(),tuple中的copy()---浅拷贝 
2. 切片操作都是浅拷贝 
3. 赋值运算(拷贝地址)浅拷贝 
4. 数据备份---系统容灾性质 

三 深浅拷贝的作用

1. 浅拷贝:减少内存的使用 
2. 深拷贝:数据备份 

四 深浅拷贝的使用

1. 赋值语句是一种浅拷贝 
2. 浅拷贝只拷贝了外层对象(外层对象地址不一样),但是内层对象(之拷贝了地址,因此地址一样的对象,是同一 个对象---内层对象共用) 
3. 深拷贝拷贝了外层对象(外层对象地址不一样),也拷贝了内层对象(内层对象地址不一样)

五 示意图

image.png

image.png

六 代码示例

# 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)