00:00
好,我们回家上节课内容,上节课我们讲了多维列表的排序,多维列表怎么排序?靠的是这个拉姆达表达式,你把这表达式写清楚了,那排序规则就有了。诶,那什么是Lam姆DA呢?是一个匿名的这个函数,它是函数,它能进行计算,但是它没有名字,所以叫拉姆DA表达式,那它还有什么样的玩法吗?说这是一个男人,这个男人是OEZ,身高165,体重70。那么这个男人呢?我就得到了,我想拿这个人的数据克隆出一个人儿来,我说这块儿一个克隆人儿是谁啊?是曼,那这个克隆人儿它也是这么一个数据,我们可以点开这个pen tutor去观察一下这个效果,点开之后我们把代码粘上去,可视化这个编程过程。第一句话声明了一个慢。这个慢指向一个列表,列表里面第二个身体信息又指向一个列表。第二步,克隆人也指向这个列表,那这会造成什么问题?比如说我现在让man。
01:02
第0个元素,也就是它的名字让后它是什么?不是O1Z了,是O2Z了,我去运行这个效果,我们可以看到一改全改,只要这一点OR2Z,那全都改成O2Z了,我不想一改全改,有没有办法呢?有这么一方法叫拷贝。怎么拷贝?注意我把这个克隆不是等于慢了,慢不是一个列表吗?我调用他的拷贝方法,这个时候就给他做出一个副本来。拷出来一份,那怎么考呢?我们注意指向这个列表。我让。原始人的这个名字改成O2Z,那这就变成O2Z了,但克隆人的名字还是O1Z,这样不就不是一改全改了吗?分开修改了吗?那这个分开修改是可以,但是有这么一个问题,你注意后边这个,不管是本体还是克隆体,它全都指向谁指向这个?列表,那造成什么效果,我们不看第0分量,看第一个分量里的第0分量,比如说他的身高,他现在不是165了,现在是多少,他现在是166了,我们再去运行运行。
02:12
结果你看,不管是你改本体克隆体也改,改克隆体本体也改,所以又是有点儿一改全改的意思,但不是从浅层次的一改全改,他是从深层次的一改全改,那这种情况怎么办呢?那我们就得这个想办法是吧,你拷贝的只能考浅层次,那我喊帮助吧。船,救命吧。对,谁喊对列表的拷贝方法,他说这块return a shallow copy of the list.返回的是列表的前拷贝,那什么是浅拷贝?浅拷贝shallow表面的浅层次的。那就是浅浅的拷贝吧,那说白了就是拷贝这一层呗,但深层的不拷贝,有没有深拷贝?我们问问AIAI说有这么一个东西叫深拷贝。有深有浅是吧,有深有浅,那我们就在这儿进行修改。
03:04
怎么修改啊,首先导入拷贝这个模块,我们说不是这个拷贝了,我们首先调用谁调用拷贝的深拷贝,Deep拷贝,把这个人给搁进去,这个时候我们再去看的时候呢,我们可以看到拷贝是这么一个类,有这么一个OE原始人,这个拷贝人,这个原始人和拷贝人不但浅层次分开了,深层次也分开了,所以这个就是深拷贝,那这个深拷贝我们一改,把这个改成166了,这个并不会受影响。所以深拷贝怎么样,它就深,它就能考的深,那有能有多深,我这儿有一代码,我们把它再去观察一下,运行了一看啊,L1L一几层我们可以看到。一维二维、三维、四维列表够深了,再一运行,你看四维列表全都能拷出来,所以深拷贝特别深,不管是四维,只要你内存够,那1万维都行是吧,1万维都行。
04:02
深拷贝讲究一个深字儿,它里边的空间完全独立,互相不影响的哦。我们总结一下这3种拷贝啊,第一种是直接赋值,一改全改,完全共享,第二种是浅拷贝,浅层拷贝,深层还是共享的,第三种是深拷贝。深拷贝全新的空间,彻底独立内存的状态确实会影响到方方面面。比如说我们看这么一个例子,我们首先定义一个二维列表,穿上这2倍列表乘以3之后,我输出它,让它第0的元素去IPAD1再观察它。那结果出来是什么?我想让第0个元素IPAD1,结果3个元素全IPAD1了,这是为什么?因为你这不是二维列表吗?二维列表它指向这个。位置是这个位置,那你这个时候乘以3之后,这三个全指向这个位置,那指向这个位置不行,指向这个位置它它它它效果不行,那我想什么,我想给它直接各式各的空间,那什么是各式各的空间,那这个其实就是各式各的空间上来之后,我把它写死了之后我们再去。
05:05
上来之后各种各的空间,就导致了他什么IPAD1就ipad达到这儿了。那我拷贝拷贝不得了吗。我用这个拷贝的方法import一个copy,我把这个0这个东西我做成什么,做成copy X, 我们给它定义成什么呀?拷贝的deep,拷贝的X,它再乘以三行,不行,我们试一下。运行起来你看运行起来没问题,没问,但是这块就已经有问题了,第0个没问题,你看这地步拷贝它是什么?它是拷贝出一个深拷贝,但这深拷贝本身是新的地儿,但是它乘以3之后又指向同一个新的地儿了。所以这个是是吧,不行的,结果你看还是都得什么呀,所以这个问题出在这乘法上,拷贝和乘法就有点儿不太兼容,因为你乘法复制,复制它就是一改全改的东西嘛,所以我们要怎么样把这拷贝给它分开,分开之后再看,你看这个我三个地步拷贝分配仨空间,这个时候我再PAD1是不是就要完成这个效果了。
06:14
好,我们这次讲的是这个拷贝有三种赋值方法,第一种是等号赋值,共用地址一改全改,第二种是浅层次的独立浅拷贝,Shallow拷贝,深层次的共用,第三种是deep拷贝,全部独立,互不干扰。那我就想复制一些节奏是吧,有的时候想复制,有的时候想新建,变化当中要有稳定,稳定当中又想求变化,那怎么做,下回再说。哦,EZ教程。
我来说两句