python ==和is 深拷贝和浅拷贝 列表推倒式

2018-08-19  本文已影响0人  浮华_e823

== 和 is
is 是比较两个引用是否指向了同一个对象(引用比较)。
== 是比较两个对象是否相等。

In [1]: a = [1,2,3]

In [2]: b = a 

In [3]: a == b
Out[3]: True

In [4]: a is b
Out[4]: True

In [5]: import copy

In [6]: c = copy.deepcopy(a)

In [7]: a == c
Out[7]: True

In [8]: a is c
Out[8]: False

浅拷贝
浅拷贝是对一个对象的顶层拷贝
通俗的理解就是:拷贝了引用,并没有拷贝内容

In [1]: a = [1,2,3]

In [2]: id(a)
Out[2]: 139650508626376

In [3]: b = a

In [4]: id(b)
Out[4]: 139650508626376

In [5]: a.append(4)

In [6]: a
Out[6]: [1, 2, 3, 4]

In [7]: b
Out[7]: [1, 2, 3, 4]

In [8]: a = {'name':'二哈'}

In [9]: id(a)
Out[9]: 139650508722376

In [10]: id(b)
Out[10]: 139650508626376

In [10]: id(b)
Out[10]: 139650508626376

In [11]: a['ID'] = 100

In [12]: a
Out[12]: {'ID': 100, 'name': '二哈'}

In [13]: b
Out[13]: [1, 2, 3, 4]

In [14]: b = a

In [15]: b
Out[15]: {'ID': 100, 'name': '二哈'}

In [16]: id(a)
Out[16]: 139650508722376

In [17]: id(b)
Out[17]: 139650508722376

In [18]: 

深拷贝
深拷贝是对于一个对象所有层次的拷贝(递归)

In [1]: import copy

In [2]: a = [1,2,3]

In [3]: id(a)
Out[3]: 140269250702600

In [4]: b = copy.deepcopy(a)

In [5]: id(b)
Out[5]: 140269250690120

In [6]: a
Out[6]: [1, 2, 3]

In [7]: b
Out[7]: [1, 2, 3]

In [8]: a.append(4)

In [9]: a
Out[9]: [1, 2, 3, 4]

In [10]: b
Out[10]: [1, 2, 3]

列表推倒式
所谓的列表推导式,就是指的轻量级循环创建列表

n [12]: a = [(x,y,z) for x in range(0,2) for y in range(0,2) for z in range(0,
    ...: 2)]

In [13]: a
Out[13]: 
[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]
上一篇下一篇

猜你喜欢

热点阅读