最近在复习python相关的基础,然后想到了曾经面试遇到过深浅拷贝得问题,我想对于初学者来说,还是很有必要去学习的,因为在以后的开发中,可以利用深浅拷贝去解决工程上的问题。
在python中,创建一个对象,并且将它赋值给另一个变量的时候,python并没有拷贝这个对象,而拷贝了这个对象的引用。
In [1]: l1 = [1,2,3,4,5,[1,2]]
In [2]: l2 = l1
In [3]: id(l1)
Out[3]: 4426724936
In [4]: id(l2)
Out[4]: 4426724936
In [5]: l1
Out[5]: [1, 2, 3, 4, 5, [1, 2]]
In [6]: l2
Out[6]: [1, 2, 3, 4, 5, [1, 2]]
In [7]: l1[5].append(3)
In [8]: l1
Out[8]: [1, 2, 3, 4, 5, [1, 2, 3]]
In [9]: l2
Out[9]: [1, 2, 3, 4, 5, [1, 2, 3]]
什么是浅拷贝,什么是深拷贝,这里我们结合py实例一一的介绍一下。
浅拷贝
浅拷贝没有拷贝子对象,所以原始数据改变,子对象也跟着改变
In [10]: import copy
In [11]: l3 = copy.copy(l1)
In [12]: id(l1)
Out[12]: 4426724936
In [13]: id(l3)
Out[13]: 4427112136
In [14]: l1
Out[14]: [1, 2, 3, 4, 5, [1, 2, 3]]
In [15]: l3
Out[15]: [1, 2, 3, 4, 5, [1, 2, 3]]
In [16]: l1.append(6)
In [17]: l1[5].append(4)
In [18]: l1
Out[18]: [1, 2, 3, 4, 5, [1, 2, 3, 4], 6]
In [19]: l2
Out[19]: [1, 2, 3, 4, 5, [1, 2, 3, 4], 6]
深拷贝
深拷贝拷贝了子对象,所以修改原始数据,子对象不改变
In [20]: l4 = copy.deepcopy(l1)
In [21]: id(l1)
Out[21]: 4426724936
In [22]: id(l4)
Out[22]: 4427111880
In [23]: l1[5].append(5)
In [24]: l1.append(7)
In [25]: l1
Out[25]: [1, 2, 3, 4, 5, [1, 2, 3, 4, 5], 6, 7]
In [26]: l4
Out[26]: [1, 2, 3, 4, 5, [1, 2, 3, 4], 6]
如果这篇文章帮助了你,麻烦点点喜欢,谢谢大家!
网友评论