深copy AND 浅copy
1. is ==
总结
- is 是比较两个引用是否指向了同一个对象(引用比较)。
- == 是比较两个对象是否相等。
In [1]: a = [11,22,33] In [2]: b = [11,22,33] In [3]: a == b Out[3]: True In [4]: a is b Out[4]: False In [5]: id(a) Out[5]: 140715444902984 In [6]: id(b) Out[6]: 140715444891912
In [7]: a Out[7]: [11, 22, 33] In [8]: b Out[8]: [11, 22, 33] In [9]: c = a In [10]: c Out[10]: [11, 22, 33] In [11]: id(a) Out[11]: 140715444902984 In [12]: id(b) Out[12]: 140715444891912 In [13]: id(c) Out[13]: 140715444902984
### 特殊情况 In [14]: a = 10 In [15]: b = 10 In [16]: a == b Out[16]: True In [17]: a is b Out[17]: True In [18]: a = 10000 In [19]: b = 10000 In [20]: a is b Out[20]: False
2.深copy 浅copy
- 深拷贝是对于一个对象所有层次的拷贝(递归)
- 浅拷贝是对于一个对象的顶层拷贝
-
通俗的理解是:拷贝了引用,并没有拷贝内容
In [33]: a.append(55) In [34]: a Out[34]: [11, 22, 33, 55] In [35]: b Out[35]: [11, 22, 33, 55] In [36]: c Out[36]: [11, 22, 33]
3.import copy 不同
1)copy.deepcopy() 一直递归,拷到最底层
深copy:其实就是重新开辟不同内存,保存和原来的相同信息!和原来的信息,内存没有关系
2)copy.copy() 浅拷贝对不可变类型和可变类型的copy不同
对于可变类型,只是copy第一层
对于不可变类型元组,不copy