浅拷贝(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