深浅拷贝
Posted li-jj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅拷贝相关的知识,希望对你有一定的参考价值。
赋值:
- 没有创建新的对象,多个变量指向一个对象,与拷贝无关
-
a=[1,2,3,[4,5]] b=a print(a,id(a))#[1, 2, 3, [4, 5]] 1807996384072 print(b,id(b))#[1, 2, 3, [4, 5]] 1807996384072 a.pop() print(a,id(a))#[1, 2, 3] 1807996384072 print(b,id(b))#[1, 2, 3] 1807996384072
浅拷贝:
- 只拷贝第一层,第二层不会被拷贝
-
l1=[1,2,3,[‘barry‘,‘alex‘]] l2=l1.copy() print(l1,id(l1))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2578599060616 print(l2,id(l2))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2578599889480 l1.append(‘wusir‘) print(l1,id(l1))#[1, 2, 3, [‘barry‘, ‘alex‘], ‘wusir‘] 2578599060616 print(l2,id(l2))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2578599889480 l1[0]=333 print(l1,id(l1))#[333, 2, 3, [‘barry‘, ‘alex‘]] 2578599060616 print(l2,id(l2))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2578599889480 内存地址不同,被拷贝的对象作出改变,另一个不改变
深拷贝:
- 创建一个新的对象,把内部所有的元素都进行拷贝,不会产生一个变另一个跟着变
-
import copy l1=[1,2,3,[‘barry‘,‘alex‘]] l2=copy.deepcopy(l1) print(l1,id(l1))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2037159109640 print(l2,id(l2))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2037157644168 l1[1]=222 print(l1,id(l1))#[1, 222, 3, [‘barry‘, ‘alex‘]] 2037159109640 print(l2,id(l2))#[1, 2, 3, [‘barry‘, ‘alex‘]] 2037157644168
以上是关于深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章