python 深拷贝与浅拷贝

Posted qmzp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。

浅拷贝的方式有:

lst=[1,2,3]

(1)直接赋值: lst_cp = lst

(2)for循环遍历生成:lst_cp= [i for i in lst]

(3)copy模块下,copy.copy仍为浅拷贝

深拷贝的方式

(1)借助copy模块

>>> import copy

>>> lst_cp = copy.deepcopy(lst)

 

以上方法的测试:

注意:因为string类型是不可变类型,所以修改string元素时会新创建一个地址空间放置数据

(1)直接赋值

(2)for循环

>>> lst=[1,2,3]
>>> lst_cp=[i for i in lst]
>>> lst_cp
[1, 2, 3]
>>> lst_cp[1]=4
>>> lst_cp
[1, 4, 3]
>>> lst
[1, 2, 3]
>>> id(lst_cp[0])
33263960
>>> id(lst[0])
33263960
>>> id(lst_cp[1])
33263888
>>> id(lst[1])
33263936

 

 

另外注意:对于非容器类型(如数字、字符串、和其他’原子’类型的对象),浅拷贝与深拷贝相同,都是指向相同的地址空间。

因为对于非容器类型,改变其值时,不是修改当前内存中的数据,而是新开辟一块内存存储数据。

>>> ot=4
>>> id(ot)
37708144L
>>> type(ot)
<type ‘int‘>
>>> ot=5
>>> id(ot)
37708120L

 

下面一篇文章中对深拷贝与浅拷贝介绍的很清楚,地址:http://python.jobbole.com/82294/

 

以上是关于python 深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

Python中list的复制及深拷贝与浅拷贝探究

python中的深拷贝与浅拷贝

python深拷贝与浅拷贝

[Python3 填坑] 009 深拷贝与浅拷贝

Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

python_深拷贝与浅拷贝