Python:浅拷贝、深拷贝的理解

浅拷贝(shallow copy):只拷贝父对象,不拷贝父对象内的子对象,即不拷贝深层对象。所以原对象的子对象数据发生变化时,

           新的对象(拷贝的对象)数据也会发生变化。

           在浅拷贝中,子对象(或者叫深层对象)在拷贝后的对象中可以看做是对象的引用关系,所以

           浅拷贝后,当原对象子对象再次发生变化后,拷贝后的对象也会发生变化

深拷贝(deep copy):父对象内的子对象也会一同拷贝

  例:

  浅拷贝:

   

   In[2]: import copy

   In[3]: l1 = [1,2,3,[4,5,6]]  #把外层列表看成父对象,嵌套的列表看成子对象
   In[4]: l1[1]=0  #更改l1中父对象中的数据
   In[5]: l2=copy.copy(l1) #浅拷贝,
   In[6]: l1
   Out[6]: [1, 0, 3, [4, 5, 6]]  # 更改后的 l1 
   In[7]: l2
   Out[7]: [1, 0, 3, [4, 5, 6]] #更改 l1 的父对象,不会影响 l2  

   In[9]: l1[3][1]=8  #更改 l1 的子对象
   In[10]: l1
   Out[10]: [1, 0, 3, [4, 8, 6]] #更改 l1 子对象后的 l1
   In[11]: l2
   Out[11]: [1, 0, 3, [4, 8, 6]]  # 更改 l1 子对象后的 l2

 

 

 

   __________________________________

  深拷贝:

     

     In[2]: import copy

     In[3]: l1 = [1,2,3,[4,5,6]]
     In[4]: l2 = copy.deepcopy(l1)
     In[5]: l2
     Out[5]: [1, 2, 3, [4, 5, 6]]
     In[6]: l1[3][0]=9 # 更改  l1 子对象
     In[7]: l1
     Out[7]: [1, 2, 3, [9, 5, 6]]
     In[8]: l2
     Out[8]: [1, 2, 3, [4, 5, 6]] #更改 l1 子对象 ,不会影响 l2 

 

转载于:https://www.cnblogs.com/longyuu/p/9789749.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值