00:00
来我们说我们这个怎么讲呢?变量在内存里面,或者对象在内存里面到底是什么样的,这个我们要做一下简单的分析啊,来看这就拿这头东西我们去分析一下,首先程序执行到第一句话的时候,它生了一个变量叫LIST1,同时它又产生了一个对象,是后面的这一坨东西,对吧?那么我们运行的顺序是什么顺序呢?从上到下,然后呢,这个等号先算哪边右是不是先算右边对不对?先把右边的东西弄出来,然后复制给左边,所以我们先在内存里面产生的是这个东西,是这个东西,那么这个东西长什么样子,看好了内存里面它会被分成两部分,分成两部分,左边一大块啊,右边一大块,左边放什么呢?放这个list的这个变量,右边放什么呢?右边放实际的对象,我这对象是一个列表,所以这个对象呢,长这个样子。看着长这个样子,一共几个数据,12344个,一个两个三个四个可以吧,每个格子里面放的是什么东西?这里面放的什么东西?金毛狮王好了,金毛狮王来啊,先写个金就可以了,这是紫山龙王好了,写个紫,然后这是白眉英王白,然后这块是青易福王好了,那么一开始程序执行到这块的时候,只是右边有这么一个对象,那么这个对象它要复制到前面这个类似的一,是这样吧,复制给前面类似一,那么这时候程序会产生类似的一,那么类似的一在哪呢?在这边看好了类似的一在这面类似的一,那么类似的一里面存的是什么东西?咱们从代码上看这个类似一是不是整个这套东西,对吧?但实际上告诉你不是,实际上它是在这边引用的右边的这个东西。
01:59
东西,那么右边才是你真正的数据,右边的数据是什么呢?它就是一个内存地址,比方说它的内存地址是1A2B,比方说它的内存地值是12B,那么这个时候我把1A2B整体复制到这边,等于1A2B,那么这个时候我们通过内存地址的一个指向我就能知道,哎,你这个LIST41操纵的是整个这个列表,到这儿能看到不,这是它里面真实的情况啊,里面真实情况,所以我们在下面做的任何操作,实际上是由他发起的这个操作,但实际执行是谁呀?执行是谁?后边是不是后面这个东西才是列表吧,能听懂啥意思吧?就好比说我这手指头指向大秧哥,指向大洋哥,我说手指头去给我吃饭,实际上指向的是大洋哥去吃饭,能明白啥意思吧,操纵的是实际上是大洋哥,所以这里面。
02:59
它的内存里面咱们大致啊这样来理解,就是说真正的列表,真正等号右边这个东西是什么呢?是我们这一坨这个对象啊,这个对象真正产生对象的只有这句话,只有这句话听了啊就这句话,然后往下走,往下走第二行了,第二行它是把LIST1里边的值看好了,把LIST1里边的值负值给了谁呢?给了LIST2,那这时候LIST1是不是有的现成的对不对,LIST2有没有现在没有了,那么会干嘛?是不是在这边来一个LIST2,好了,看这来一个LIST2,那么内二的值是多少值,应该是多少负值操作,我把等号右边的值交给左边的变量,对不对,那么右边这个值类似一是什么值是不是12B是吧?所以这块是什么东西,1A2B好了,它是12B,根据推算,12B是谁?
03:59
第二题是谁?是不是右边这个玩意,所以它的指向,诶也是这个玩意,是不是这样东西,现在两个变量指向的是同一个对象,能不能听懂,能不听懂好了,那么到这能听懂再往下走,后面就很好解释了,来到这一句话的时候,让LIST2判一个羊左史,LIST2是谁呀?是不是这个玩意儿,这个玩意是不是指向是这个东西,哎,这个东西往后面去判一个羊左使是不是在后面,哎,你再给我加一个阳啊,不在这画了,不在这画行吧?啊,我盼的过来了,比方说这叫阳左使啊,写个阳进来,写个阳进来之后,那你注意看,我们去打印LIST2,那么打印的是不是这边这个东西,对不对?那我问你LIST1的指向是不是也变了。
04:51
是不是也变了,那次一打印的结果是什么?是不是也是这个金毛狮王,什么什么紫山龙王,白眉郡王,青衣父王,还有杨博士,是不是这样,原因就在这,原因就在这,所以我们最终去打印的类似的一也是这个东西,因为你在内存里面只有这一个对象产生,能听懂什么意思吧,那么这个东西如果做出一个线中的比较,就好比对样,看着两个是不知道,这是我的类似一,这是我的类似一,我类似一,我现在指向它,我现在指向他,那么一开始指向它之后,我做了什么事,我又来了个类似的二,对不对,类似二是不是把它的底数付给他了,是不是它是不是也指向他,那这个时候我用这个手,这个手当给他一拳,脸肿了,那这个手看到他是不是脸也是肿的,懂吧,就是这个概念,就这个两个变量指向的同一个对象,能听懂什么意思,不能听懂吗?来再说一遍啊,再说一遍,我先把这个图先拿过来。
05:51
来。人呢,人呢,这儿。看看啊,再说一遍,再说一遍,最开始的时候,最开始的时候内存里面空空如也,什么都没有,什么都没有,咱把内存啊简单的画一下,它这里面内存里面听好了是两块空间,听好了未来你们还会学,其实不止两块,还有的包括咱们之前小数据池,还记得吗?小数据池又是一块,知道吧,那么这块空间跳了,左边放的是变量,我们可以这么来认为,左边放的是变量或者引用啊,变量应用,右边放实际,哎呀。
06:34
没事没事来这个右边主要放的是我们的什么呢。对象啊,就说白了放的是数据啊,对象好了,那么有了这么个东西之后,紧接着我程序一行一行走,走到这一行的时候,这行实际上是干了两个事,第一个事先去创建右边的对象,也就是说他先去把谁弄出来,先把谁弄出来,是把这列表先弄出来,所以它是最先产生的,我们可以开始第一步先把它弄出来,它是第一步先把它弄出来,它弄出来之后,兄弟们,它弄出来之后,那么弄出来是长什么样子呢?就是这个样子,就是这样子,就是这样一个东西,然后往里面去放东西,一个两个,三个,四个,就四个东西,把四个值塞进去,塞进去之后它会有一个内存地址,那么内存地址我们来一个比说零一条010101可以吧,随便啊,这个内内址不用纠结,然后接下来有了它之后,左边又会产生一个新的变量,那么这是第二步,看着这是第二步,它干了这么个事,来一个list。
07:41
一那么LIST1在左边就会产生一个格子,格子的名字叫LIST1,那LIST1,然后LIST1的值是什么?是把这个对象的内存地址交给它,那这值多少多少010101对吧?我们根据内存地址的推算,我们知道它指向的是这个对象啊,是指向的这个对象,那么往下第三步看好了,第三步实际上是谁是这个等号啊,第三步实际上是一个等号开操作,然后再往下走,再往下走到下面这一块是LIST2等于LIST1,那么再说这块的话,第四步是不是把这个拿出来赋值给前面这个LIST2,是这样的吧,对吧?那么产生LIST2这个地方会产生一个LIST2,把它画出来。
08:32
啊,LIST2 list2的值是LIST1的值,LIST1的值现在是啥?是不是01010,所以这块值多少啊,010101,那么再往下走,再往下走,我让第六步,哎,这第六步,第六步进行A判,我是让LIST2的指向进行个A判,那么类似二现在指向是是不是也是这个对象啊对吧?在它people股后面进行一个aend,是不是相当在这倍再加一个对吧?加一个值,加一个新值之后,第七步我们再去打印类似二的时候,哎,类似二里面加多了一个,在打印什么呢?这个类似一的时候,你会发现类的一是不是也改变了,对吧?两个东西指向同一个对象,所以你这边改了,你这边肯定跟着改啊,肯定跟着改,所以这个东西啊,这个东西就是我们现在出现这种效果的原因啊,现在出现这种效果的原因,那么这个原因找到了之后,找到之后记一。
09:33
一个规则就是说我们进行赋值操作,实际上是引用内存地址的什么呢?复制啊,引用的内存地址的一个赋值,也就是说这种直接操作的话,实际上内存里面几个列表,内存中此时只有一个列表,并且两个变量指向一个列表,是这样的吧,这左右两个手一起指向同一个东西,那么我用一个手去操作,另一个也是跟着去变的,所以我们对啊,对其中的一个进行操作啊,对其中一个进行操作,那么这个时候实际上两个都跟着变,两个都跟着。
10:33
来这到这儿能不能听懂,到这儿这就2000块钱,这就2000块钱这个地。这个地你看两千四千四千,这就2000了,还有呢,还有呢,这刚开始刚开始能听懂吗?这句话记着同一个对象被多个指向或者引用所指向的时候,一定会出这种情况,会出问题,你小心点,多个变,一个变都跟着变,一个变都跟着变好了,如果说在那个内二等于一下边五根内一再增加一个值。
11:11
类似一点的碳的一样的一样的,也跟着变,也跟着变,因为啥还是这个道理,看着还是道理,我这个时候指向它,这个时候也指向他这个手候当中来一拳,这个手看中这么多了一拳,我这个时候当再来一拳,这时看是不是多了一拳,懂他意思吧?啊,如果这个他不懂,来就你这个杯子看下,就看这个杯子很帅的杯子是吧?这个杯子看着很爽,对吧,我看见这个杯子,你是不是也看到这个杯子了,对吧?我们两个人一起看到这个杯子,我看这杯子,我不然把这水喝了,你看这杯子是不是就变成空的了,对吧,我们两个操作是一个东西,懂吧,喝两个地方啊,好了,喝不了,太烫了,内存内存。内存地址你说哪块地址,你说这个引用的那个地址是吧,那个不变,那个不变,还是原来那个地址啊,那个地方不用纠结,你要知道他们两个是一个就可以了啊好了好了好了,来我们来看一下它们两个内存地址是不是一样的,怎么看来着,IDID来一个一再来一个ID list2对吧,它俩是一样的,我说的是对的吧,总理。
12:27
有人用。诶什么是不是一样的,是不是一样的是吧,两个是一个对象啊,是一个对象添加后面添加之前跟天后的一这个可能会不一样啊,我们试一下好吧的ID来LIST1在下面再打印一下list,看这俩是不是一样的呗。一个啊,一个同一个同一个他没涉及扩容,扩容的话可能会变啊,这个这个不提了,不提了,到这就结束了啊,扩容更又又又是个事,还没有这个事,好了,这个能听懂,我这个两个东西指向同一个对象啊,小心点,这种坑未来还会有啊,未来还会有,好了这个地方就说到这儿,跟他有相同的道理,还有什么呢?字典。
13:17
字典也是一样啊,原组就不提了,原组不可变,所以没什么说的,没什么说的是吧,字典也一样,你用这个引用把它改了,用这个引用再去看,肯定也跟着改了啊,然后往下,接下来咱们说深浅拷贝啊,浅拷贝上面那还不是拷贝上面那个只是一个引用的副职,只是个赋值。那么拷贝是什么状态?两分来,咱们说拷贝copy这个词认识吧,说到复制也对,但实际上我们在生活中经常会出现这种拷贝的情况,叫什么叫抄作业,是是拷贝作业抄没抄过作业不是在这儿小学抄没抄过有五写作我不信,我不信来抄作业是一种什么样状态呢?人家有一份作业,我是不是照着他。
14:17
把那个重新抄一份对吧?一样的,一样的,在计算机里面拷贝,就是这个概念,我照着他原来的样子再做一个,再做一个,你可以说它叫什么,叫拷贝也好,叫它克隆也行,克隆听过吧,克隆就等于一个多利对吧?原来有多伦克隆羊多利对吧?从他身上拿来个体细胞,然后培养不二代成一个新羊对吧?这个羊跟原来的羊长得一模一样对吧?长得一模一样,克隆人不也是吗?对吧?把这个人复制出来一份,但是复制出来那一份还是你吗?不是了,这时候是几个东西了,两个了,你抄作也一样,人家给了你一份作业,你抄了一份出来,这是你的新作业,对不对?原来那个跟你这个长得一样,但是是一样东西吗?不是,不是一个东西,不是一个东西长得可能一样,什么都一样,但是不是一个玩意儿,这是两个完全不同的个体,所以前拷或者拷贝都是什么呢?创建新对象,它是用来。
15:17
创建新对象的,创建新对象的还是这个例子,看着啊,到绕你们的时候了,类DA等于还是这堆人,换两个吧,赵本山,刘看伟,刘德来,刘能行,刘能赵四好四好了,就这几个人,那么那么来高危了啊,不管了,再见,来往下我来了一个列表,也就说现在给了你一份作业,对吧,我要抄一份出来,怎么抄呢?看这直接LIST2等于list一点拷贝,点c copy拷贝,这是copy,听好了,这不是单纯的赋值了,现在是什么了?拷贝,然后再赋值。
16:17
拷贝在复制,那么拷贝的话,我刚才说了,这时候是什么效果,是不是把原来那个再造出来一份,对不对?那么这个时候听好了,你例四二跟list子一还是一回事吗?List的二和list的一哪一个例子,哎,不是一个对象了,因为你拷贝出来的你抄了一份,正好它抄了一份,那么看一下看一下,首先我们来观察一下I list1id list2肯定来一不一样,不一样,不一样,咱不能代表它不是一个对象了,能不能能内存地址都不一样,能是一个东西吗?不是对不对,那么这个时候我在LIST1里面往里面加的新人,比方说好好谢大小,那么这个时候我们再去打印,打印类似一,然后再去打印。
17:17
LIST2你仔细观察,我一行打印了,你仔细观察,这个时候就不一样了,就不一样,我在LIST1里面下LIST2有影响吗?说白了,你来了一份作业,我抄了一份出来,我在这份作业上写到了你的名字,这个名字会跑这里面来吗?不会,会,那你是后抄的啊,后补的吧,所以这时候完全就是什么,是不是两个列表了,能听懂吗?这个好嘞,这块能听懂,那么接下来也是观众听懂不成,我们要。看一下内存啊,看一下内存还是按照刚才的那个步骤往下走啊来。
18:01
也是一个大的内存空间,分成两部分,那么刚上来的时候,这块是不是来个这个东西,那么来个这个东西,那么这右边出来几个格子,三个格子好数来一个两个三个对吧,然后它会有一个什么东西内存地址了,来我们来个1A2B啊12B,然后左边类似一去装这坨东西,那么左边会产生一个格子叫类似一。零一类似一是指多少?1A2B好了B2B,我们推断12B是谁,是不是它了是吧?好了,那再往上走,再往上走,往下走的话,这个地方执行到这一句话的时候,这句话是很关键的,这句话也是先去执行,哪是不是后面东西啊,那后面是类似一点,Copy copy什么,照着抄,照着抄是不是跟他长得一样了是吧?那长得一样的话,哎,照着抄,再给我来一个长得一模一样是吧?来克隆一个出来一个,里面内容是完全一样的,但是这是一个,这是一个,这两个东西对不对,地址肯定不一样对吧,肯定不一样,那我来一个,你说多少吧,3A4B行吧,3A4B,那么接下来我把这个对象赋值给前面list的二,那么左边是不是多一个LIST2是吧,好嘞,来这多一个LIST2它的值多少?3A4D,为啥呢?因为我是把这个东西赋值过来的,对吧,然后通过推算它的值是是不是。
19:30
这个对向了是不是指剩是两个东西了,对吧?指向两个东西,紧接着我让类似一进行判,往谁判是不是类似一是不是这多东西对吧?来这坨东西A判后面是来来加一个是这样的吧,然后它加完之后我去打印类似一类似二,类似一长这样,类似二长这样,不是一个玩意儿,能听懂啥意思吧,不是一个玩意儿,好了好了,这个就叫做前靠背啊,都前靠背,那么这个东西来把它拿过来,把它拿过来,这个就是我们第一个支识点叫前拷背啊,前拷背这个地方和上面这个东西揉到一起,揉在一起经常会合到一起问,合在一起问啊,这个问起来啊,对没,这俩是,这俩是2000啊,这两是2000,然后听好,然后咱们说它是拷贝进行的一个,怎么讲呢,复制和粘贴,那么这两个对象不是一回事,前拷贝这是一种写法。
20:30
还有一种写法,看好了LIST2等于LIST1,这个也是前靠背,这个也是前靠背,这什么效果,背到背到最后从头到尾对不对,从头到尾,从到尾,咱后说切片,切片是不是产生一个新的东西,是吧?一个道理一个道理,切片会产生新的对象,对吧?产生新的对象,而我这个对象又很特殊,正好是从头到尾,所以就相当于是前拷贝,把这东西都拷贝了一份,抄了一份啊,抄了一份,好了,把这个去写一下啊,这copy和这个东西啊,理解一下,简单理解一下,然后咱们接着说什么叫深copy啊。
我来说两句