Python:深浅拷贝

Posted PingY

tags:

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

导入模块:

>>> import copy

深浅拷贝:

>>> X = copy.copy(Y) #浅拷贝:只拷贝顶级的对象,或者说:父级对象
>>> X = copy.deepcopy(Y) #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象

例:

>>> D = {name:jack,age:20}
>>> C1 = copy.copy(D)
>>> C2 = copy.deepcopy(D)
>>> id(D);id(C1);id(C2)
53035208
53611144
53610248
>>> D[name] = tom   #改变源
>>> D;C1;C2
{age: 20, name: tom}
{age: 20, name: jack}
{age: 20, name: jack}

如果有嵌套:

D = {name:{first:john,last:lee},job:[IT,HR]}
>>> C1 =  copy.copy(D)
>>> C2 = copy.deepcopy(D)
>>> D;C1;C2
{job: [IT, HR], name: {first: john, last: lee}}
{job: [IT, HR], name: {first: john, last: lee}}
{job: [IT, HR], name: {first: john, last: lee}}
>>> id(D);id(C1);id(C2)
53018568
53611592
53610056
>>> 
>>> D[job][0] = RRRR   #修改其中一个元素
>>> D;C1;C2
{job: [RRRR, HR], name: {first: john, last: lee}}
{job: [RRRR, HR], name: {first: john, last: lee}}
{job: [IT, HR], name: {first: john, last: lee}}

#结论:
(1)深浅拷贝都是对源对象的复制,占用不同的内存空间
(2)如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
(3)如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
(4)序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

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

我要学python之深浅拷贝原理

Python 的深浅拷贝 终于明白了

python深浅拷贝

python 深浅拷贝,集合 ,小数据池 操作

Python高级语法-深浅拷贝-总结(4.2.1)

Python深浅拷贝