深浅拷贝
浅拷贝:将被拷贝的对象的值重新赋值给拷贝对象( 不会开辟新的空间)
深拷贝:会对被拷贝对象中的可变类型元素重新开辟新的空间
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']
注意:深度拷贝操作后,即使新列表第二层被修改,原列表依然不变。

浙公网安备 33010602011771号