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 

猜你喜欢

转载自www.cnblogs.com/longyuu/p/9789749.html
今日推荐