<返回更多

浅谈Python深浅拷贝

2019-08-15    
加入收藏

对于各种编程语言,深浅拷贝总可以让初学者头疼不已。而Python--这门十分受欢迎的语言也不例外。下面,分享下自己对Python深浅拷贝的理解。

单变量

在编程中,赋值“=”这个操作很常见,但是它底层的含义学问很大。稍有不注意,就给你找麻烦。赋值“=”类似于深复制。直接上code

>>> x = 10
>>> y = x
>>> x, y
10, 10
>>> x = 0
>>> print(x, y) 
0, 10

发现,y的值没有变化!!!也说明y = x 这个赋值操作并没有实现把x的地址赋值给y,而是创造了一个引用。x,y的值是独立的,不会相互影响。直接上图助你理解引用

浅谈Python深浅拷贝

 

复杂数据结构,例如 List, Array

但对于复杂数据结构的赋值和单变量的不一样,它是一种浅复制。直接上code

>>>ls1 = [0,1,2]
>>>ls2 = ls1
>>>ls1.Append(-1)
>>> ls1, ls2
[0,1,2,-1],[0,1,2,-1]

赋值后,两个变量是同时改变的。这和单变量的不同。

可以这样理解,对于复杂数据结构的赋值,其实是数据结构地址的赋值,即ls1和ls2共享了这个list的地址,都指向这个数据结构。所以,一个变化后,另一个也会变化。类比说明下,假设黄山市和徽州市(徽州更好听)是同一个地方的名称,都指向同一个地点。徽州市实现了小康,那黄山市肯定也是小康了。

深复制

那么,如何实现复杂数据结构的复制呢?使用Python的一个包:copy.

>>>import copy
>>> ls1 = [0,1,2]
>>>ls2 = copy.deepcopy(ls1)
>>>ls1.append(-1)
>>>ls1,ls2
([0, 1, 2, -1], [0, 1, 2])
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>