00:00
好,接下来呢,我们来进入到我们的下一个知识点啊,下一个知识点我们叫什么呢?哎,我们来聊一下我们的可变对象。可变对象啊,呃,一直在说是吧,可变对象啊,不可变对象,但是我们也一直没有去聊聊这个可变对象到底是什么啊,可变对象到底是什么,那我们说了有可变对象,还有不可变对象,那我们要问了,可变对象指的是对象的什么可变,哎,对象什么可变?哎,我们说了可变对象,可变指的是什么?是我们对象的什么呀?值,还记得我们说的是对象里边的三个部分吧,哎,我们来说一下啊,每个对象,每个对象中,呃,每个对象中都诶保存了我们这个三个数据啊,三个数据诶或者说分成三个部分啊,三个数据哪三个部分啊,一个是我们的ID,我们的标识对吧?还有一个是我们这个type,我们的这个类型啊type我们类型还有一个什么呀,我们这个哎,Value,我们这个对象的一个值啊,ID我们叫做一个标识啊,标识这个type我们叫做一个这个类型,而这个我们叫做一个什么呀?哎,值,哎值,那我们这里说的可变对象指的是什么?可变,哎,是我们的什么呀?哎,是我们对象的这个值可变啊,是我们对象的值可变。
01:25
诶直可变,所以这里面注意啊,我们来回顾一下我们之前画的那个图啊,我们来看一眼。之前我们这个画的图里边,其实这个对象的结构画的还是比较清楚的,我们说对象实际上分成了三个部分,对吧?一个是ID,一个是typeb,还有一个是value啊,那ID和typeb随便任何一个对象,这个东西都是变不了的啊,都是变不了的,唯一能改变的就是什么呀,Value,但是仅限于什么可变对象,像我们这些,诶数字也好,像我们这些租串也好,布尔值也好,他们的Y都是不可变的,但是可变对象是可以改变的,嗯,那好,可变象是谁?哎,可变对象像我们的这个什么呀?哎,列表就是一个可变对象,所以这里边我们来说一下列表,哎,列表就是一个什么呀?哎,就是一个可变对象,那比如说我们举个例子啊,举个例子在这里我们这写一个,我们这再写一个,写一个这个A等于一个中号,中号一个123,那现在我们A就是一个什么呀,就是一个列表,那这里边如果。
02:34
是这个东西我用图怎么体现出来啊,怎么体现出来,我们来看看效果啊,这里我直接复制一下啊,我把这都给它先。删掉。把这些数据呢,也都先删掉,现在我们就剩一个单纯的这么一个图啊,这个图里边现在我们整个的内存,然后这是保存我们变量的位置,对吧,这是我们表示代码的位置,那现在刚才我写的是一个什么呢?哎,我写的是一个A。
03:10
等于一个中号,哎,中号一,逗号二,逗号三对吧?A等于中号逗号一,逗号二,逗号三这么一个对象,那这个对象我们怎么表示,还是既然有变量了,是不是在我们这个变量的区域先整一个变量啊?哎,所以这有一个变量叫做一个A,然后这是不是有了一个对象了,哎,对象需要干嘛?需要在我们内存里边专门开辟出一块区域,是不是来保存这个对象啊,哎,来保存这个对象,所以在这儿我们来插入一个。块区域,这块区域啊,比如说我设置一个这个颜色啊,它里边还是三个数据,一个是我们这个did,我们假设就等于一个0X111啊随便写一个,然后还有什么呀,还有一个叫做type type它的类型什么呀?它的类型应该是class,一个list,因为是个列表嘛,对吧?然后还有一个是它的一个VALUE6Y6,它应该等于什么?等于的是一个中号,一个一逗号二逗号三啊逗号二逗号三,但是我这属于简写了,如果要再写,再真的写的话,会稍微的结构更复杂一点,我们先用这种简单方式去表表现一下,然后问题就来了,我们这个变量A,它是怎么和我们这个对象建立起联系的?哎,在变量A里边保存的是不是它的内存地址啊,比如说这块实际上就应该保存的是一个0X111,就相当于我变量A里边有一个指针,它指向的是我们这个什么呀?哎,指向的是我们内存里边的这个对象啊,指向我们内存对象是不是这样一个关系啊,这样一个关系好,那这个就是我们说的一个这个。
04:39
它啊,它是一个可变对象,那怎么体现出可变呢?注意这一块它的值是可以改变的啊,它的值是可以改变的,那现在我们来看一下啊,我们直接来整个代码来演示一下,那这儿呢,我来在这直接我就不写了,我们来在我们这个I豆里来演示来A等于一个这个一逗号二逗号三,我是不是创建这么一个对象啊,哎,然后怎么改呀?哎,我直接来一个A中号零,哎中号零等于一个这个十啊A中号零等于一个十,这个时候我再打1A,我们来看A的值变成什么了,A的值是不是变成十逗号二逗号三了,哎,十逗号二逗号三了,所以这个时候我们就干嘛了,哎,我们来看一下啊,听见吗?我在这写一下,然后往下写,我来一个A中括号零啊,A中号零等于个十,我现在是不是在把什么?哎,把索引为零的那个值改成了十啊,哎,改成了十,那这是干嘛?注意了,我这个是不是在给变量重新赋值,这里是不在。
05:39
给别人重新赋值,很明显不是这是在干嘛,这是在通过变量找到对象,修改了对象当中所引为零那个值,所以这个注意我这一个步骤改的是哪?改的是这个位置,改的是这位置干嘛了?我是把它改成了十啊,把它改成十,所以这个时候你再打印A,你所看到的这个VALUE6是什么?是123还是十二三,哎,是十二三,因为对象里的VALUE6被我们改变了,所以这就是可变对象,可变对象指的是什么呀?对象里的Y6可以被我们改变,哎,那有同学说了,那老师我直接这么写,我直接这么写,我直接来一个A,等于一个这个四逗号五逗号六,我一走,走一个,我再打一,这时候A的值不也变了吗?哎,A的值不也变了吗?那注意这两个一样吗?我这个和这个是一样的吗?哎,注意不是一样的,这种方式我是在修改那个对象,而这种方式在干嘛,诶是在改那个什么呀,改这个变。
06:39
的啊,改变量,所以如果你是这么写的,你后边再来一个A,等于一个中号,来一个四逗号五逗号六,这个关系在我们内存里边体现出应该什么样的,哎,那还是我们这是有一个456啊456,那这个实际上是一个新的列表,那既然是新的列表,我在这儿就要创建一个什么新的对象,新的对象我这改一个地址叫做一个二一类型还是list,然后它的值变成什么了,变成了四逗号五逗号六啊,四逗号五逗号六,然后注意了A里边的值变成什么了,是不是也变成了。
07:15
221啊,就等于我们把这个箭头干嘛了,哎又指向到了这个这个位置,那注意这个时候我这个操作有没有对这个对象产生影响,哎没有对这个对象产生影响,因为我们在这儿是不是创建了一个新的对象,然后赋值给了A啊,哎赋值给A,那注意这两个一个区别啊,这两个一个区别,那这里我们来写一下啊,我们来写一下,哎如果什么呢?哎,如果是我们来说一下,哎叫做一个A。第一种方情况,我们是A中号零等于一个这个十啊等于个十,这种操作是在干嘛?这个操作是在干嘛呢?哎是在通过,哎通过我们这个变量去什么呢?哎去修改我们对象的什么呀?哎对象的一个值啊,是在通过变量去修改对象的值,所以这种操作,哎不会什么呢?哎不会改变我们这个变量中的什么呀,哎变量所指向的什么呀,所指向的这个对象,哎所指向的对象,也就是说哎你现你第一次指向的是这个对象,你改完了以后,它指向的是不是还是这个对象啊,哎,它不会改变我们这个变量所指向的对象,而这种操作啊,这种操作我们来看一下,我们来看一下A等于一个中号来个S4逗号五,逗号六,这是在干嘛?这在干嘛?哎,我们来说这个操作是在。
08:45
给什么呢?是在给我们这个变量,诶重新赋值啊,重新赋值这样会干嘛?哎,这种操作,这种操作哎会改变我们这个变量所指向的这个对象,所以注意这两种操作,这种操作我们称为叫什么呢?这种操作我们叫做改对象啊,这叫修改对象,而这种操作我们叫什么呢?诶叫做一个改变量啊,这叫改变量,那这里边注意了,你要来看这种的时候,一定要能区分出什么是改对象,什么是改变量,诶同学说老师我还是感觉没有区别,咱们来看区别在哪,看这儿啊,我来我重新打开一下,我们来看一下,呃,这样吧,我来整一个新的文件,我们在文件里来演示保存一下啊,我们来code在这儿来一个一零,我们叫做一个可变对象,可变对象表一个PY。那在这里面我们。
09:45
来说一下这个事儿啊,可变对象,呃,直接写一个来一个这个A等于中号一,逗号二,逗号三,在这儿我们是不是创建了一个列表啊,哎,创一个列表,然后在这紧接着我们打印一个,诶打印一个这个是什么呢?这个是我们修改前,修改前我们打印什么呢?先来打印一个它的值啊,先来打印的值,然后再打印一个什么呢?哎,再打印一个它的ID,哎,Did我们来一个ID一个诶啊第一注意下这个顺序啊,先是直,然后是ID,我们这一执行咱们来看呃,修改前直是这么样的,ID是不是这样的?哎,这两个东西都有了,然后再往下啊,我们在这儿来干嘛呢?来通过索引来干嘛呀?诶修改我们这个列表啊,直接A中二一个零等于一个这个十,这样改完了以后,很明显它的值会变对吧,应该变成十二三了,1023对吧,但是现在我们要看的什么,看的是ID变不变,这是我们这个。
10:45
修改后啊,修改后我这一保存,我们这一执行,咱们来看一二三十二三对吧,值变了,但是注意的是ID变不变,ID变不变,诶注意ID并没有改变,也就是说自始至终A里边保存的都是79046856这个对象,它的只是对象你的值变了,而而这个对象变不变,诶对象还是那个对象,是对象里的值发生改变了啊发生改变了,所以注意这种情况通过索引去修改的是干嘛,它是在修改对象啊,修改对象而再看哈,我们下边一种,我们叫什么呢?我们叫做通过什么呀,通过哎我们来为我们这个变量哎重新赋值,重新赋值直接来一个A等于一个这个四逗号五逗号六,这个时候我们看的效果其实也是A的那个值是变成456了,但是我们来看ID啊,我这一执行ID变成什么了,诶值确实变成456了,但是ID是什么?是719243504I。
11:45
B是不是也变了,哎,什么意思?就是说是直式变了,但是这个东西变完了,它是一个什么呀?新的对象啊,它是一个新的对象,所以注意一定要能区分出这个叫做改对象,而这个叫做什么呀?改变量啊,这叫改变量,而注意了改对象,我们改对象的时候,你变量中保存的那个内存地址是不会变的,而你在改我们的这个什么呀,改这个变量的时候,它实际上就干嘛了,给变量重新赋值了,这1.1定要区分啊,一定要区分,哎同学说老师你为什么要说这个呀,这这这这这这有什么用啊?哎,我们来看啊,把这先注掉,上边这个待会自己来测试一下,下边我们再来看啊,我来一个A,等于一个这个一逗号二逗号三,然后呢,我这直接来一个B等于A啊,来一个B等于A,然后在这看着了,我们这来一个print,我来一个A逗号B,我打印一下A逗号B,哎,先打印A吧,哎,ID一个A,呃,这里边。
12:46
这样吧,A,然后这来一个逗号A是吧,然后再往下接着写,我来一个这个诶B,然后这来一个B,然后这来一个IDB这一保存,那很明显现在A和B它们指向的是同一个对象,对吧?我这一执行我们来看是不是都是58437480,然后值是不是也是一样的呀?哎,也是一样的,那这里边注意了看着了啊,我做一件什么事,我来一个B中括号零等于一个十,哎,B中括号零等于个十,这个时候我通过这个索引零是不是在把第一个元素改成十啊,哎,改成十,那这个时候我要问的问题是B肯定变了,我要问你的是A变不变啊,A变不变,变不变。
13:29
哎,我们来看效果一直行是不是都变成了这个呀,哎都变成了1023了啊都变成123,哎内存地址是不是还是这样的,哎,那这是为什么?哎这是为什么?我们先说结论啊,我们先说结论,什么结论呢?当哎我们去修改对象时啊,去修改对象时,如果如果我们的这个有其他变量,有其他变量也指向了该对象啊,也指向了该对象,则哎,修改。
14:01
会什么呀,诶也会在什么呀,也会在其他的这个变量中体现啊,变量中体现这个一定注意啊,我们去修改对量时,如果有其他变量也指向该项,则修改也会在其他的变量中体现,其实这东西非常好理解,画一个图一下就明白了来,还是在这CTRLCCTRLV,呃,把这个先给它删掉。删掉以后呢,我们还是啊,把这代码给它重复一下啊重复一下,那首先我们来了一个变量,叫做A等于123,是不是相当于让它等于它呀,哎,这我们用刚才那个CTRLCCTRLV粘过来,然后往下写,往下写写了什么,写了一个,诶我先画个箭头啊,先画个箭头。哎,现在A指向的是这个对象,然后往下写,我来了一个等于什么?B等于AB等于A,实际上在这我是让这个变量的值和A的变量值是不是一样的呀,也就是说B的值也是0X111呀,现在来看就是什么呀,就是B和A它们指向的是什么呀,是同一个对象啊,它们指向的是同一个对象,那现在它俩都是一个对象,那现在接下来我来看了,我这来一个B中括号零等于一个什么呢?等于一个十,我现在通过索引零是不是来修改,修改那个值啊,修改谁的值,修改对象的值,诶刚才这应该是一啊,这应该是1123,然后现在我这改完了以后,我是不是把这个一变成什么了,变成了十了,变成十了,那现在我问你。
15:31
B对应的那个对象第一个值变成了10A,那个变变。是不是变了呀,因为他们两个变量指向的是不是压根就是一个对象啊,哎,压根就都是一个对象,所以这时候会有改变,如果你还有个C,还有个D,还有个E,还有个F,他们指向的都是这个对象,那他们是不是都会改变呀?是这意思吧?哎,他们都会发生变化啊,都会发生变化,这是这种情况,那还有什么情况呢?那注意这里边我们来说一下,这是叫什么,这是叫做改对象,改对象那他什么呀?哎,他会还什么呀,影响所有指向。
16:15
该对象的这个变量啊,会影响所有指向该对象的一个变量,这叫改对象,好,然后我们再看还有什么情况呢?还有在这啊看着了,哎,我们回过头来,这回啊,我不这么写了,我这是不是写一个B0等于十啊,不这么写了,我写什么呢?我写一个B等于啊,B等于一个这个十逗号二逗号三啊十逗号逗号三,我们这一保存,咱们来看效果。那这个时候其实很明显是B肯定是十逗号二逗号三,对吧,我们要看的什么呀,是A,这回A你才变变A你才变,不用想了,肯定不变,之前是不是说过了,你再给变量重新赋值的时候,它是不是不会影响其他变量,哎所以在这我们一执行,哎,A是变了,哎BA没变对吧,B变了,但是他们俩的地址还一不一样了,哎就不一样了啊就不一样了,所以这个东西在我们图里怎么体现出来呢?我们还是在这儿我先总结啊,先总结注意了,我们修改一个,哎我们什么呢?哎,我们为一个变量,哎重新赋值时啊,重新赋值时哎不会影响其他的变量啊,不会影响其他变量,这句话一定要时刻谨记啊,你怎么改都没事,它都不会影响到其他的变量啊,都不会影响其他变量,好,那在这儿我们来看一下啊,图怎么体现出来,那在这里边呢,我先把这个代码给它。
17:40
去掉啊去掉,然后在这里边还是这样,现在的关系是不是还是这样啊,现在是一个123啊,一二三两个对象,两个变量指向的是同一个对象,好,接下来往下写了,我来了一个B等于一个什么呢?等于个十逗号二逗号三,这个东西怎么点出来,那等于十逗号二逗号三,这是不是一个新的列表啊,新的列表就意味着我们需要在内存里创建一个什么呀,创建一个新的对象啊,新的对象这叫做一个0X23,它的值呢,是一个十一零二三啊1023,然后注意我B应该指向谁了,哎,就应该指向这个211了,对吧,指向这个211,那这箭头干嘛?我应该从这儿是不是挪到了这个这儿来了,哎,挪这儿了,那注意了,我刚才这个操作对A有没有影响,诶,它是没有任何的影响的,因为我是在给这个变量重新赋值,对A没有影响,但是改对象的时候是不是就影响了啊,当然现在你改A改B都没有影响,因为他们是两个对响啊,两个对象。所以这。
18:40
这个一定要注意区分改对象的时候,改对象的时候会干嘛,如如果别的对别的变量也指向这个对象,会对那些变量也产生影响,而改变量你随便改,你怎么改都是只影响你自己,不会影响到什么呀,不会影响到别人啊,不会影响别人,这也是我们说的改对象,还有这个改变量,这里边一定要注意啊,一定要注意,哎,那这边同学说老师呢,我怎么区分什么是改变量,什么是改对象啊,哎,一般什么呢?
19:14
哎,我们一般哎只有在什么呀,哎赋值时,哎在为我们这个变量赋值时,哎才是什么呢?才是修改变量,哎其余的哎都是修改我们这什么呀,对象啊,一般只有在于变量重新赋值时,也就说你A等于什么什么B等于什么么,这是赋值再改变量,而我这种A中二零等于什么什么A中二二等于什么什么A点什么什么等于什么什么,那这个不是给变量赋值,这些就是什么呀,改对象,所以你只要看到什么等于A等于B等于C等于啊是吧哈,等于这些都是什么呀,改变量,剩下你就大部分都是什么呀,都是改对象啊都是改对象,那到时候我们再去区分一下,现在你先有这么一个印象啊,那接下来也把这个代码啊给他写写,好好的体会体会,区分一下什么是改。
20:05
变量,我们什么是改对象,还有什么是改变量啊,区分一下,好,我们在这儿来停一下。
我来说两句