深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

    

posted @ 2018-06-22 14:04  rianley  阅读(127)  评论(0编辑  收藏  举报