用最明白的语言来说明浅拷贝shallow copy和深拷贝deep copy的区别

情况一:

from copy import deepcopy

List1 = [1,2,3,[4,5]] 	#源列表的元素有1,2,3和一个列表

List2 = List1.copy() 	#列表2是源列表的浅拷贝

List3 = deepcopy(List1) #列表3是源列表的深拷贝

List1[2] = 10086 		#把源列表的某值改变
print(List1)			#[1, 2, 10086, [4, 5]]
print(List2)			#[1, 2, 3, [4, 5]]
print(List3)			#[1, 2, 3, [4, 5]]

这是最常见的情况,无论是浅拷贝还是深拷贝,都不会被源列表数值改变而影响。
运行规则:程序找了个地方存了10086这个值,然后让List1[2]指向10086。
那’3’这个值还在被List2[2]指着,没变。
至于深拷贝的List3,是完全独立门户的,不会受任何影响。

情况二:

from copy import deepcopy

List1 = [1,2,3,[4,5]] 	#源列表有123和一个列表

List2 = List1.copy() 	#列表2是源列表的浅拷贝

List3 = deepcopy(List1) #列表3是源列表的深拷贝

List1[3]= [4,6]     	#把源列表某值改变
print(List1)			#[1, 2, 3, [4, 6]]
print(List2)			#[1, 2, 3, [4, 5]]
print(List3)			#[1, 2, 3, [4, 5]]

情况二其实是情况一一样的结果,但是是作为情况三的对照实验。
情况二的List1找了块地方建了一个列表,内容是[4,6],再把List1的[3]指向这个列表。

情况三:

from copy import deepcopy

List1 = [1,2,3,[4,5]] 	#源列表有123和一个列表

List2 = List1.copy() 	#列表2是源列表的浅拷贝

List3 = deepcopy(List1) #列表3是源列表的深拷贝

List1[3][1] = ['UZI']	#这次是把套娃列表里面的值改变了
print(List1)			#[1, 2, 3, [4, ['UZI']]]
print(List2)			#[1, 2, 3, [4, ['UZI']]]
print(List3)			#[1, 2, 3, [4, 5]]

情况三对照于情况二,情况二是整个列表拉去改变,相当于新建了一个列表进行更改与重定向,情况三是在这个列表进行小修改,不影响指针指向,就会导致浅拷贝的指针仍然指着源列表的位置,随着源列表里面的更改一并更改。

总结:深拷贝是新建一套值,与源列表完全独立互不影响的,浅拷贝是新建一套指针指向源列表的位置。
好比我们去找财务结算工资,情况一二是一位新财务入职,旧财务还在交接的情况,新财务来之前的账(浅拷贝)还是需要员工去找旧财务对账。
情况三是旧财务交接完毕,公司就只有财务这个人,没有新旧之分了,所有人对账(浅拷贝)都只能去找财务了。

PS:还在学习初期,可能解释还是有偏差,如果您觉得有任何觉得值得讨论的地方,可以在底下留言。感谢您的观看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值