【语法】List 的浅拷贝和深拷贝(故事解说赋值、浅拷贝、深拷贝)

import copy

a = [[1.2,3],[4,5,6]]
b= a
c= copy.copy(a)
d = copy.deepcopy(a)

a.append(7)
a[1][2]=0

print("原列表:",a)
print("引用赋值:",b)
print("浅拷贝:",c)
print("深拷贝:",d)

一、场景

当我们面试关于python语法的时候,面试官会出一些我们很难注意到的问题,比如上面的代码段.

我们可能出现了很多种回答,究竟答案是哪个样子呢?不烦可以自己试试!

二、答案

答案是这样的:

原列表:[[1,2,3],[4,5,0],7]

引用赋值:[[1,2,3],[4,5,0],7]

浅拷贝:[[1,2,3],[4,5,0]]

深拷贝:[[1,2,3],[4,5,6]]

三、趣话说拷贝

这里我们梳理一下三个概念:引用赋值、浅拷贝、深拷贝

(1)引用赋值

引用赋值 b=a ,等于a这个对象起了一个别名,b和a 指向了同一个东西,不管是对a进行修改还是对b进行修改,实际上修改的还是同一个东西。

就好比,王小明他有一个别名叫“王百万”,那王小明和王百万都是同一个人。

(2)浅拷贝

浅拷贝对于列表,实际上拷贝出来的是原先的对象每个值的内存地址,然后死盯着一亩三分地其他不管。

王小明家三年前家里种了两亩地,一亩种的西瓜,一亩种的玉米。

浅拷贝隔壁老李就是记住了这两亩地,就看着这两亩地,王小明今年两亩地都开上中西瓜,那浅拷贝老李每天都盯着这两亩地那肯定是很了解这个变化的。至于王小明又在隔壁村承包了一亩地种番茄,浅拷贝隔壁老李并不知道。

(3)深拷贝

深拷贝,对于列表,他是一次性记忆,将变量当时的状态和值直接拷贝过来,从此与原变量无关,完全独立了。

深拷贝小张记得以前王小明家是在种西瓜奔小康,于是深拷贝小张也学王小明学种西瓜,多年以后王小明开上了劳斯莱斯,深拷贝小张一脸懵逼,他还以为小明是那个农民,实际上这么多年没联系,王小明家的两亩地被征收做房地产了。

 

以上是本人的理解,不知道是否总结到位。

欢迎一起探讨,个人微信ai_hellohello

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值