1. is ==
总结
- is 是比较两个引用是否指向了同一个对象(引用比较)。
- == 是比较两个对象是否相等。
In [1]: a = [11,22,33]In [2]: b = [11,22,33]In [3]: a == b
Out[3]: TrueIn [4]: a is b
Out[4]: FalseIn [5]: id(a)
Out[5]: 140715444902984In [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 = aIn [10]: c
Out[10]: [11, 22, 33]In [11]: id(a)
Out[11]: 140715444902984In [12]: id(b)
Out[12]: 140715444891912In [13]: id(c)
Out[13]: 140715444902984
### 特殊情况In [14]: a = 10In [15]: b = 10In [16]: a == b
Out[16]: TrueIn [17]: a is b
Out[17]: TrueIn [18]: a = 10000In [19]: b = 10000In [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