00:00
看这啊,来,我们来写这样的一个东西啊,写样东西来还是来一个列表一等于写个啥呢?写个我都不知道写啥了,大片吧,超人啊,什么七龙珠啊,龙珠葫芦娃。小时候看过一个挺好玩的,叫山中小猎人,然后接下来我再来一个列表,再来一个列表,往里面去套一些个啊内部的东西啊内部的东西,比方说写个金成武什么王力宏,随便来吧,来一个,再来一个张行啊加会行了,好了,就这样一个东西啊,就这样东西,那么我们知道,我们如果说这样来的LIST2直接等于LIST1,那么这个时候我们打印ID list1 ID list2一样的是吧,一样的对吧?那试过了吧,这个那两个是一样的,地址是一模一样的,因为它是直接赋值对吧,想不一样怎么办呢?来copy是吧,来copy copy就会产生两个对象。
01:32
啊对吧,来整体运行下来,这是两个对象,两个不一样的对象,那也就是说现在这个类似一和类似二,现在已经相对来说独立起来了,那么接下来接下来看好了,我想往这些人里面啊,加一个人加一个人,现在说大洋哥啊奋发图强,特别想进去啊,特别进,那怎么进去呢?我是学先定位到这个列表里面对吧,这个之前咱们作业里边是做过的是吧,很简单,比方说我现在让LIST2啊LIST1吧,LIST1我们能看得见LIST1里面的第几项,01234对吧,来第四项,第四项,然后呢,进行一个呃判的呃判的一个谁大洋哥是吧,大洋哥终于成功了,终于成功了,那么他成功了之后,我们来看一下LIST1和LIST2,很察看一下LIST1和LIST2里面内部内部情况啊,内部情况。
02:32
现在这两个是不是还是不一样的对象,对不对,好了,抄了一份是不是,但是我们运行一下,看一下他俩不一样,你来看这里面有大洋哥,这里边也有大洋哥起,这是不是就很神奇了,这是不是很神奇了,看那为什么这样子,还是我们用画图啊,用画图来看看内存子啊,看一下内存里边那个图西还是这个东西啊,左边是一一块东西,右边是一块东西,来左边这里面咱们已经画了很多次了,这里边左边会有两个东西,一个是LIST1,哎,List,然后呢,它的值一会再往里面填,还会有一个LIST2,对吧,LIST2,然后LIST1刚出来的时候啊,刚出来的时候是这句话,直到这句话的时候,首先会产生一个大的列表,大列表里面有这几项,其中。
03:32
最后一项,第四项又是一个列表,对不对,所以看好了,它不是你们想的那么简单直接化的,首先这边呢,会产生一个列表,列表可能有点多,1123455个格子,五个格子来一。23455个格子能看懂吗?这个这个格子,那么这五个格子前几个都很正常,都很正常啊,什么超人呐啊往里写一下啊,什么超人啊超人呐,这是七龙珠。
04:07
啊,七龙珠还有谁呢?葫芦娃啊,还有谁?山中小豆人啊,山中小豆人最后一项就比较尴尬了,它是什么东西?又是个列表,又是个列表,列表挺好,它它是又是一个对象,它不会在这里面去产生,在哪产生呢?在外边再产生一个列表,再产生一个列表,这个列表里面放着1233个格子,那就说这是一个格子,两格子三个格子,那么这三个格子里面,第一个格子放什么东西,金城金城武,金城武第二个格子放谁?一双击他就一双击,就六六热了。来。第二个格子这放什么?王力宏,第三个格子呢,渣渣辉,好渣渣辉,然后这个对象会有一个地址,因为跟他一样嘛,它也是个列表,对吧?那么这个列表它会有一个地址,假如说这个地址我们随便给一个,随便给一个,比方说这个地址是呃,1A2B啊12B,那么这个时候呢,整体这个对象,整体这个对象这一块空间这头东西它是一个列表,那么这个列表地址是12B12B是装在是不是上一个列表里面的,是吧?所以这个格子里面你猜猜放什么东西,这个格子里面放的是1A2B,那根据它的内存地址,我们可以说,哎,这个东西指向的是一个新列表,是这样的吧,好了,是这样子,之后我们这个大列表是不是也得有个地址,对吧,它的地址我们来编一个,比方说101010,那么有了它之后,这个类似一里面是不是也。
05:52
也有值了。等会儿啊,我这一双击它就它就它就蹦过去啊。没事,再来一个,哎,这边这边我们给的是101010,那么这个LIST1里面放的是多少101010,然后根据它的推算,这个东西是指向这个东西的,也如现在我们一句话出来看啊,例子一出来,直接是例子一指向这个列表,列表里面又引入了其他的列表,能看懂吗?这个,那如果说里边再套一层呢?就比方说这个金城武里面,金城武后面又跟个列表,是不是金城武后面又要引出一个,对吧?就是这样的一个结构,到这有没有迷物的。
06:36
确定啊确定,那不迷糊,咱们接着走,到这之后,紧接着看好了,紧接着就开始哪句话了,是不是这句话了,哪有判断没有判断,LIST2没出来了,对不对,这个时候我让LIST1进行一个拷贝,赋值给LIST2赋值给list,那也就是说把这个东西类似的一是谁?兄弟们是不是1010是不是也就说是这坨东西对不对,把这坨东西给我复制出来一份,那么也就是说在右边是不是产生一个一模一样的对不对,产生一模一样的里面几个格子,五几个格子,是不是也是五个格子,对吧?来也是五个格子里面第一个格子也是什么是C,然后呢Q,然后这是H,然后是还有一个格子,最后一放的什么1A2B,然后它是不是12B也指向同一个对象,是不是这样的,是不是这样的,虽然我拷贝了,但是我拷。
07:36
我备的是类似一,而类似一在内存里面就是这么大一块东西,把这东西复制出来一份,那就是这一坨东西,而他们两个内部的情况,他指向了一个新东西,那么同样的他也要指向这个东西,他也要这东。举一个很简单的例子,我现在指向大洋哥,我现在指向的是大洋哥,那么把我复制出来一块或又出来一个,我是不是也指向大洋哥,能听懂什么意思,不能听,就是我指向大洋哥,那复制出来那个我也要指向大哥,对吧?我们两个是一样的,不是他内部就这么玩的,就这么玩的,他内部就是我指让他拷贝的是我,不是大阳哥,我拷贝的是类似的衣服,对不对?哥不是,不是他指着他只拷贝碰长这一句话的特性,这句话特性就是这个样子,就是我把这个list拷过一份,说白了我只当个把我复制一份出来,一份我两个同样。
08:36
还是三个字,单哥有几份几份一份,所以你内存里面这个对象几份一份能看懂吗?这个是一份,然后看好了它是一份的话,那我在类似四里面去A的一个大秧哥什么意思,012344里面A单格是不是在这里面看的,那这里面upon倍又多了一个看着大洋哥进去,大洋哥进去,大洋哥进去之后,那么我们看到的类似的二里面是不是也是档案格进去了,懂们这是它现在我们见到的拷贝它的执行的效果,所以我们现在看到的控制台里面看好啊,控制台里面我们见到的效果。
09:22
就是这么产生的,就会产生两个大洋哥,懂白意思吧,这是它里边内部机制,就是这样子,好了,既然说它有这样的一个问题,那么怎么样才能完全的把两把这个列表复制出来呢?看这这个是一个什么,这叫拷贝,拷贝我们可以叫它前拷贝,前拷贝说白了我现在指向大洋格复制出来的,我还是指向这个大秧格,我们两个指向都还是一个,说白了这个只是表面的复制了,表面的复制了,深层次的大洋哥没有被复制,我指向是大洋哥复制出来那个也指向大洋哥,我们两个用的还是同一个象,还会出现各种各样的问题,那么我们需要用到谁呢?深拷贝,你琢磨琢磨那个深浅,深浅你琢磨琢磨浅是啥意思,表面对吧,表面兄弟对吧,表面兄弟,那么我们要什么叫做深层次的兄弟,对不对,我们。
10:22
探讨一下深浅的问题是吧,所以浅拷贝只是什么呢?拷贝第一层,这东西只拷贝第一层,他内部的就这里边这个东西他不会,哎,他不会再复制一份,他不会的,他只是现在只是全拷背吗?表面兄弟就一层啊,就一层,那么我想深拷贝怎么玩?看好了深拷贝再拷贝一次不是啊,那就麻烦了,那我要掏十层,你疯了还有办法看着深拷背,深拷背深拷背首先需要你去引入一个东西,看这在这下面需要的一个东西叫import copy import copy用copy模块,这个叫模块,用这个模块里面有一个东西叫做deep copy deep copy看这了吗?Deep什么意思,深度的对吧,深度的深度。
11:22
的靠背深靠背,所以这个是真真正正的完完全全的复制出来一份,来看一下这些吧,在这import引入的是copy copy啊,然后呢,我还是准备一个列表,LIST1等于啊,随便来,比方说上面行复制一下啊,上面就它了,就它了,这些人啊,还是这些人,然后接下来看好了,这个深拷贝不是列表专有的,不是列表专有的,而是这模块里面给的这功能叫深拷贝啊,我们来个LIST2等于copy.deep copy,然后往里面扔个参数,把LIST1扔进去,好把LIST1扔进去进行深度拷贝,进行一个深度拷,也就是说现在我只剩大杨哥,我这时候再复制出来一个我。
12:22
同时又会复制出来一个什么啊哥懂啥意思吧,就产生啊,里边内部的东西也会给你拷贝,那么接下来还是上面这个代码一模一样的,把它摘过来,把它摘过来看着我在类似一里面,你就说在这个里面干嘛呢?进行一个再打印,这两个东西有影响吗?没影响,完全是两份东西,说白了看啥,我现在只让安哥,然后呢,我们不复制出来一份,把原来大安哥干死,我现在只要是不是个新的大安哥,能懂啥意思吧,所以不会受影响啊,不重要,只是举个例子啊,别干死他啊,挺好的,运行一下,看这。
13:03
看这这类东西里面是有大元格的,因为我在类似的一里边PA的,而类似二里面没有受到任何影响,能听懂什么意思吧,这个就叫做深拷位,这个叫什么?就说白了,一次性分复制量,就是刚才你说这个,刚才你说的这个啊,一次性分把两个复制出来啊,把个分出来好了,这个深浅拷贝叫深拷贝,它是把历子进行深度拷贝,包括内部的所所有内容进行拷贝,把里面的所有的内容进行拷贝,不会再出现两个变量指向同一个对象的这种混乱的情况啊,不会再出现混乱情况,所以你琢磨琢磨,你未来想用拷贝的时候,你要琢磨琢磨你到底用深拷贝还是浅拷贝,如果你的列表只是一层而不设计深层次的东西的话,你完全可以用浅拷背对吧,深浅啊不一样,一料层一层对啊,一层你用深浅拷背就够了嘛,对不对,如。
14:04
如果你的层入很多,里面内部东西非常复杂,那你要用谁呢?用深靠背啊,用深靠背啊,注意这个是两个不一样的效果啊,不一样效果,那么挺好。接下来我要说一下为什么要神成拷贝,你看因为有需要啊,我告诉你这个要从怎么讲,从对象的起源,就是对象怎么去创建,怎么去分配内存,从这块出发,我们一开始说创建一个对象,实际上是一个类的一个实例化的过程,后面你们会学它是一类的实例化的一个过程,那么这个过程涉计到什么呢?我要照着那个类里面的这个写法去创建开机内存,然后呢,分配里边的东西,往里边赋值是吧,你至少得先开内存,然后往里边赋值,是这样吧,创建个对象,但是这样的过程你要分成两步,第一步就是开个内存啊,开个内存,然后第二步往内存里面咔咔咔往里面塞东西。
15:04
最终啊,这个对象造成了这是一种方式,第二种方式是拷贝,拷贝就比这个快得多,比这个要快得多,为什么会快?想想啊,我们拷贝的时候,直接从内存里面把这块区域以二进制流的写法,一个一个就零幺代码,把零幺代码完完全全的复制出来一个是不是很快了,是不?你还用考虑这个内存的分配吗?不用了,你直接把这个人就复制出来了,直接就复出来,以二进制流的形式进行了一个拷贝。举一个例子,作业的事,作业的事,你正常的做作业,你是不是一道题一道题写对不对,那你要一个个写,很费时很费力对不对,你要思考,要去琢磨要对还是不对,但是抄作业快不快啊,抄作业快不快,抄作业直接是不是一行行照着写就行了,根本就不用考虑里面是什么情况,所以拷贝要比你正常创建对象要快。
16:04
听懂啥意思了啊,这个是拷贝比创建对象的过程要快啊,这个要涉及到你们后面讲啊,讲到面向对象那块,才能说到你们更深层次的东西啊,我只是给你们浅浅的说一下,正常创业对象就好比你做作业,你好好写,一个一个写,认真认真写很累对吧?而你想拷贝一份作业,那太容易了,照着抄就行了,什么都不用想,所以抄作业肯定比你写作业要快,所以这里面拷贝比你创建对象要快得多,并且计算机底层是啥来着,你定要拿零幺复制,还不快吗?啊,比你写的要快,比你正常的创建要快的多啊,快的多。如果懂C的东西,这个题应该是蛮容易理解的,因为C里面它的指针的也好,它里面分配内存也好,分配内存是最麻烦的一个事啊,好了,这个东西就说到这儿,这是申请拷贝,那么想想这个东西。
17:04
如果我画成图的话,是长什么样的,兄弟们?对,就这这个这个题我画成图会长什么样子,画两个是不是,原来是这边一块,这边一块两个指向同一个对不对?那么如果这个东西是什么效果,这边是一份,这边是一份完全隔离的两个东西,对吧?好了,这能听懂就OK了,这就是深浅拷贝,这就是深浅拷贝,这东西经常会出现在笔试题里面,笔试题里面尤其是这个东西,这个东西这个是最坑的,这跟拷贝有关系吗?没关系,这个没关系,这完全就是个赋值,就把那个那个那个地址赋值过去就完了啊,两个东西指向的是同一个地址啊,OK,那么这个就是咱们今天申请拷贝内容啊,深请拷贝内容,然后具体的内部的它到底做了些什么东西,以及各种各样的指向,如果你真想深研究,你去看女神的那个博客啊,你看那个博客,但是大部分人他那个博客真的是看不懂的啊。
18:08
看不懂,我这么说能听懂吗?这个啊,复制作业啊,抄作业啊,好了,这些东西说完了,咱今天的内容也就基本上就完事了啊,说一下今天讲的哪些东西,第一个我们知识点是join对吧?Join是干嘛的?把列表变成字符块啊,变成字符串好了。第二个点我们讲的什么东西,列表能循环删除对吧?这个点的删除列表能删吗?能删不能在什么时候删,循环,循环的时候知道列表不能在循环的时候删除,为啥不能删除索引,因为索引会变对吧?索引会跟着改变,这块有坑啊,这块坑一旦想到这个东西,你想不明白了,你就想想,大元哥被摘出来了,后面人往前进一个啊,往前进一个好了。第三个点我们说字典啊,字典能直三吗?字典也不能。
19:08
直接删除,循环删除啊,循环删除啊循环删除,也就说在你迭代一个字典啊,迭代一个列表的时候,都不要删,都不要官方规定就不让你删,那么我们真的要删,怎么删,把要删除的内容记录在列表中啊,表记录在列表中,然后循环列表干嘛呢?啊,删除原列表中的东西对吧?字典列表都一样,那列表或者字典。逗号吧,原列表啊,懒一点啊懒一点删除原列表或者原字典中的什么数据啊数据,这是我们要真的要删,你要遵循这样的法则,那么第四个点我们说的什么来着。
20:06
From这个东西,这个东西会对原来的字典产生影响吗?会不会对原来的字典产生影响?它是干嘛产生新的字典啊?这块听好了再说一遍,深坑,并且考试要考啊,考试要考。深坑真的是深坑,然后往下我们说什么东西直接了吗?删除是及合集合,Sat集合的特点是什么?重是不重复,还有什么无序啊,不重复无序,它里面基本上你不用记什么操作,不需要你去记什么过分的操作,你只要知道它是无序的,它能帮你去去除重复就可以了啊。S集合然后涉及到一些类型转换的问题,类型转换的问题还是你列表转成什么东西,或者什么东西想互相转换,基本上什么想转成什么就用什么括起来,对吧,想转换成什么就用什么括起来啊,除了字符串跟那个列表之间啊,其他的都是这个道理,然后第七个我们说的是什么东西啊。
21:31
个冻结冻结冻结冻结算了,冻结那个无所谓,第七个什么呢?是深情拷贝,要深情拷贝,今天最懵的,你们下午现在可能有的人有点有点有点能听懂,但是下午你回头看代码的时候,很多人会懵啊,很多人会懵,因为这个路我已经走过了啊,走过了很多人会上午听的啊,不不的都听懂怎么回事,这个图也能画的明白,下午一写啊,就开始开始迷啊,开始迷深浅拷贝,深浅拷贝首先第一个直接赋职是什么概念?
22:12
就相当于直接负值,V41等于A42就是负值对吧?两个看啊两个变量指向同一个对向,快捷方式是啊,快捷方式快捷方式什么快捷方式快捷方式两个快方式都知道,对对对,是这个道理,是这个道理,来第二个事,第二个事什么是前拷贝拷贝拷贝只拷贝第一层内容,只拷贝第一层内容,那么它一般是什么?Copy是吧?Copy,然后第二个第三个是什么?深度拷贝是吧?深度拷贝深度拷贝什么拷贝对象中的所有内容都会被拷贝一份啊,都会被拷贝一份,那么它的写法是什么?先port引入一个copy,然后呢,怎么玩怎么copy。
23:12
点什么点好了,这个就是我们今天讲的全部内容啊,全部内容这些东西听好了,大部分其实在我们真正编程里面用的比较多的,会容易出问题的,就是这些个删除,这个是我们是就是以后写代码的时候容易犯的错误,容易犯的,因为我们要长时间跟两个东西打交道,然后下面这些个东西大部分都是什么呢?就是怎么讲都是题,面试题可能会多一点,笔试题啊,笔试题当你们从这毕业的时候,我们会给你们扔一套题啊,现在现在总结出来是315道,现在是315道啊,但是啊,后面还会还会再往里面扩充的啊,扩充的你在这儿不会,OK,没问题,你到了面试官那不会你三吗?对不对,你在这你有办法会,你到面试官,你有办法会吗?
24:12
没办法对吧,所以好好的忽悠那么好忽悠老监长官好了啊,这是咱们今天的内容,然后叫下午,下午今天的作业也不多,也不多,就几道题啊,就几道题,还是把前面的作业,兄弟们把前面作业,如果你觉得跟不上进度快的,赶紧把前面的作业,前面的内容好好的去跟一跟,去弄一弄,明天咱们去讲文件的操作难不难不难,哎呀,真不难啊,预习今天的东西难,我跟你讲今天东西是很难的,来第一个我们要讲什么?就一个东西叫文件操作,就是文件的读啊写去间,这玩意就这玩意,一共是九个,还是12个模式啊,我们就讲三个,剩下的你应该都会了啊,倍儿简单啊倍儿简单,模式都一样的,看啊,来一听一听。
25:12
12个蒙逼了是吧,不能直接把我拿到那边随便可以可以啊来这是我们的文件的操作,明天要讲东西,然后啊,然后把那个前面东西一定好好过过,好好过过,然后后天咱们就开始讲函数了啊,后天咱们就开始讲函数了,函数头两天很开心啊,开心的不得了,到后天你就不开心了啊,前面很开心,每一个阶段的头一天两天都会很开心,也很容易啊,很容易,到后面一升级可能就东西就会越来越多啊,好了,其实东西就这么多,吃饭去吧,上课时间的话,我让小雪通知你们。
我来说两句