python3 深浅copy对比详解
一、赋值对比
1、列表
l1=[1,2,3] l2=l1 l1.append('a') print(l1,l2)#[1,2,3,'a'][1,2,3,'a'] print(id(l1),id(l2))#4349984843499848 #可以看到两个列表的值以及id值相同,对应的是同一个内存地址
2、字典
dic={'name':'barry'} dic1=dic dic['age']=18 print(dic,dic1)#{'name':'barry','age':18}{'name':'barry','age':18} print(id(dic),id(dic1))#3115734431157344 #可以看到两个字典的值以及id值相同,对应的是同一个内存地址
3、字符串
s='alex' s1=s s2=s.replace('a','A') print(s,s1,s2)#alexalexAlex print(id(s),id(s1),id(s2))#310402083104020831040376 #赋值是同一个内存地址,替换字符串后的变量s2是另外的地址
二、深浅copy
1、浅copy
对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。
#1、普通浅copy
l1=[1,2,3,4] l2=l1.copy() l1.append('a') print(l1,l2)#[1,2,3,4,'a'][1,2,3,4] print(id(l1),id(l2))#3707732037078664 #id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化
#2、嵌套浅copy
importcopy l1=[1,[22,33,44],3,4,] l2=copy.deepcopy(l1) #改变第一层 l1[0]=111 print(l1,l2)#[111,[22,33,44],3,4][1,[22,33,44],3,4] print(id(l1),id(l2))#4323853643239048 #改变第二层 l1[1].append('a') print(l1,l2)#[111,[22,33,44,'a'],3,4][1,[22,33,44],3,4] print(id(l1),id(l2))#4323853643239048
2、深copy.deepcopy()
对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。
importcopy l1=[1,[22,33,44],3,4,] l2=copy.deepcopy(l1) #改变第一层 l1[0]=111 print(l1,l2)#[111,[22,33,44],3,4][1,[22,33,44],3,4] print(id(l1),id(l2))#4323853643239048 #改变第二层 l1[1].append('a') print(l1,l2)#[111,[22,33,44,'a'],3,4][1,[22,33,44],3,4] print(id(l1),id(l2))#4323853643239048
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。