深浅拷贝

浅拷贝:将被拷贝的对象的值重新赋值给拷贝对象( 不会开辟新的空间)

深拷贝:会对被拷贝对象中的可变类型元素重新开辟新的空间

s=[[1,2],'alex','asada']
s2=s.copy()
print(s2)
s2[0][1]=3
print(s2)
print(s)
输出结果:
[[1,2],'alex','asada']
[[1,3],'alex','asada']
[[1,3],'alex','asada']

从该程序中可知,当第二层列表中元素被修改后,原列表内容也发生变化,这是因为元素修改,改变了列表指针,使得s列表s[0]元素指向元素发生变化。如图所示:

 

 

 

修改列表后,原列表发生变化(原因:a列表指针发生变化,造成原列表中列表数据变化)

浅拷贝:只拷贝第一层

深拷贝:全部拷贝

1.浅拷贝

s3=[1,'alex','asada']
s4=s3.copy()
s4[0]=2
print(s4)
print(s3)
输出结果:
[2,'alex','asada']
[1,'alex','asada']

2.深拷贝

import copy
s=[[1,2],'alex','asada']
s2=copy.deepcopy(s)#深拷贝操作
print(s2)
s2[0][1]=3
print(s2)
print(s)
输出结果:
[[1,2],'alex','asada']
[[1,3],'alex','asada']
[[1,2],'alex','asada']

注意:深度拷贝操作后,即使新列表第二层被修改,原列表依然不变。

 

posted @ 2020-04-22 11:15  独剑飞行天下  阅读(182)  评论(0)    收藏  举报