Python:浅拷贝、深拷贝的理解
深拷贝、浅拷贝只针对有类型嵌套的对象而言。
浅拷贝(shallow copy):浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
在浅拷贝中,子对象(或者叫深层对象)在拷贝后的对象中可以看做是对象的引用关系,所以
浅拷贝后,当原对象的子对象再次发生变化后,拷贝后的对象也会发生变化
深拷贝(deep copy):父对象内的子对象也会一同拷贝
例:
>>> l1=[1,2,3,[4,5,6]] >>> import copy >>> l2=copy.copy(l1) >>> l3=copy.deepcopy(l1) >>> l2 [1, 2, 3, [4, 5, 6]] >>> l3 [1, 2, 3, [4, 5, 6]] >>> l1 [1, 2, 3, [4, 5, 6]] >>> l1[3][0]=99 >>> l1 [1, 2, 3, [99, 5, 6]] >>> l2 [1, 2, 3, [99, 5, 6]] >>> l3 [1, 2, 3, [4, 5, 6]] >>> l1[0]=100 >>> l1 [100, 2, 3, [99, 5, 6]] >>> l2 [1, 2, 3, [99, 5, 6]] >>> l3 [1, 2, 3, [4, 5, 6]] >>>
___________________________
深拷贝:
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