Python 浅拷贝(shallow copy)和 深拷贝(deep copy)

浅拷贝:
  是指复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
示例:
l = [3.1,3.2]
l1=[1,2,l]   
  # l1=[1,2,[3.1,3.2]]
l2=l1.copy() #浅拷贝
 #l2=[1,2,[3.1,3.2]]
 l[0]=3.14   
  # l=[3.14,3.2]
  #   l1=[1,2,[3.14,3.2]]
  #   l2=[1,2,[3.14,3.2]]
 l1[0]=5     
   # l1=[5,2,[3.14,3.2]]
 l2=[1,2,[3.14,3.2]]
 # l1[2]和l2[2]共同拥有l的绑定关系

 深拷贝: 是指复制过程中,复制深层变量绑定的对象的复制过程
 示例:
import copy   # 导入copy模块
l = [3.1,3.2]
l1=[1,2,l]    # l1=[1,2,[3.1,3.2]]
l2=copy.deepcopy(l1) #深拷贝 l2=[1,2,[3.1,3.2]]
l[0]=3.14    # l=[3.14,3.2]
#        l1=[1,2,[3.14,3.2]]
#        l2=[1,2,[3.1,3.2]] 此列表不受影响

 注意事项:
   深拷贝通常只对可变对象进行深层复制,不可变对象通常不会被复制

 理解:
import copy # 导入复制模块
l1=[1,2,[3.1,3.2]]
l2=l1    # l1和l2绑定的是同一个对象
l3=l1.copy()  # 浅拷贝 
l4=copy.deepcopy(l1)  # 深拷贝
l1[2][0]=3.14  # 把3.1改为3.14


深拷贝和浅拷贝的复制过程中是不会对(对象)进行拷贝对象的id不会改变,如: id(l4[0])id(l4[1])中的1,2 不会改变
但是其他的id 会改变 , 如:id(l4[2])中的[3.1,3.2]这个列表的id 改变了
以上可用 id()验证

猜你喜欢

转载自blog.csdn.net/shen1105/article/details/81057210
今日推荐