您的位置:首页 > 编程语言 > Python开发

Python 中浅复制与深复制浅析

2017-05-08 19:49 127 查看
在编程语言中,复制的比较都是一个不可避免的话题,Python中也不例外。被复制的对象通常为各种数据,包括基本数据类型(int、long、float、bool、str、…)和数据结构(dict、list、set、tuple、…)。

我们通常的‘=’方法或copy.copy()为浅复制,而深复制为copy.deepcopy()。顾名思义,浅复制即复制的深度较浅,只复制数据的存储地址;深复制即复制的深度较深,可以复制到数据的值。

1、对基本数据类型来说,深复制与浅复制意义相同,因为它们的存储地址内存放其值;

In [1]: s1 = 'copy and deepcopy'

In [2]: s2 = s1

In [3]: s3 = s1

In [4]: s1 = 'whatever'

In [5]: s1
Out[5]: 'whatever'

In [6]: s2
Out[6]: 'copy and deepcopy'

In [7]: s3
Out[7]: 'copy and deepcopy'


2、对数据结构来说,生成数据结构(如列表)时,就自动生成存储地址来存放该数据结构,该数据结构中的每个元素也都有自身的存储地址。浅复制只是复制到该数据结构的存储地址层面,该数据结构的存储地址内的元素改变,则指向该地址的所有数据结构也都随之改变。而深复制则是复制到最深层存储地址(基本数据类型),相当于重新生成一个存储地址,与之前的地址无关。

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

In [2]: b = a

In [3]: c = a

In [4]: b.append(8)

In [5]: b
Out[5]: [1, 2, 3, 8]

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

In [7]: c
Out[7]: [1, 2, 3, 8]

In [1]: import copy

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

In [3]: l2 = copy.deepcopy(l)

In [4]: l.append(8)

In [5]: l
Out[5]: [1, 2, 3, 8]

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


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 复制