00:00
好,我们继续啊,接下来呢,我们来进入到我们下一个这个知识点啊,我们还是新创建一个文件,我们叫做一个14叫一个什么呢?诶叫做一个垃圾回收啊垃圾回收诶那看到这个东西大家都很熟悉,对吧?哎,我们生活中经常会产生一些这种垃圾是吧?诶废纸,哎,废弃的这种电子产品,诶各种各样的东西都,诶都是垃圾,对吧?就像什么呢?那我们说在我们生活中会产生垃圾,那我们在程序运行当中会不会也产生垃圾呢?哎,毫无疑问,那肯定是会的,那什么呢,我们这来说一下就什么呢?诶就像。哎,我们这个生活中诶会产生什么呢?诶会产生这个垃圾一样啊,就像我们生活中会产生垃圾一样,程序诶在运行过程当中。诶过程当中也会什么呢?诶也会产生垃圾啊,也会产生垃圾,这个非常好理解,对吧?我的生活你是跟一个地方住,诶你住一天也好,你住住一年也好,它总会产生一些垃圾,同样我们程序要运行,程序要运行,运行一分钟也好,运行十分钟也好,它运行当中它会有一些东西,诶这些东西我们就称为什么呢?垃圾,那什么呢?垃圾在我们生活当中过多以后,它是不是会影响到我们生活的一个质量啊,哎,影响质量,那程序运行当中的垃圾呢,它会影响到我们程序的什么呀?诶性能啊性能,所以这块我们来说,程序运行过程中,哎产生的垃圾,哎,会影响到我们这个程序的什么呀?哎,程序的一个运行性能啊,运行性能,所以什么呀?哎,所以。
01:49
哎,这些垃圾必须被什么呢?哎,被及清理啊,被及时清理啊,垃圾多了程序运行那干嘛了,就慢了,就像我们电脑,现在电脑上这种问题可能不太明显了,在往前是吧,我们在用这个这个这个。
02:09
叉P,再用那个WINDOWS98的这个年代,你会发现我们的这种Windows电脑用的时间越长干嘛呢?我们的系统就会越慢,当然现在WIN7也有这些问题,但是没有之前那么严重,用的越长就越慢,那这个时候我们就要需要干嘛呀,需要对电脑进行重新安装系统,那为什么?就是因为我们电脑的运行过程当中产生了很多多余的文件,而这些多余的文件它就变成什么,变成垃圾,影响到我们系统的一个运行,那这是我们说的操作系统,那我们的这个Python程序同样也会有一个问题,有这个问题那我们要先搞清楚第一个我们先不想清理的问题,我们先考虑第一个问题,什么问题呢?到底什么才是垃圾啊,到底什么是才是垃圾,什么是垃圾?哎,我们来说一下,哎,没用的东西。诶,没用的东西它就是什么呀?诶就是垃圾,一个东西只要没用了,它就是垃圾,它再好它也是什么也是垃圾啊,没用的就是垃圾,那这里边我们来说一下,在我们程序里边什么是垃圾,这里边我们来看一下,我直接在这呢,我定义一个class啊class我随便写一个吧,哎,Class我这直接来一个A,哎叫A,然后在这里边呢,我们就定义一个简单一点,我来一个这个ne。
03:23
定义一个我们来一个这个in it in it里边呢,我要写简单点,我就直接来一个这个self,点一个name,等于我是一个什么呢?哎,这是我们这个A类啊,这是我们这个A类,那现在我们在这儿是不是可以创建A类对象啊,我直接来一个A等于什么呢?A等于一个A,我现在创建这么一个对象,那为了演示这个问题呢,我先在这写一个音input的啊,音input的哎,回车键退出。回撤键退出,我先写个input,待会儿来说,为什么我加上这个input以后,就是导致我的程序执行完了,它是不是不立刻结束啊,它会等我按input以后再结束啊,再结束,那这个时候我们这一执行走一个,哎,是不是这这么一个效果呀,哎,这么一个效果,那这个时候我们就创建了一个对象,一个这个A啊,我们直接打印一下,一保存,或者我们直接打A点内吧,这一保存走一个是不是A类就有了,哎,A类就有了,那这个就是我们说的一个对象,那现在注意这个对象它是不是垃圾,这个对象是不是垃圾,哎,要注意现在这个对象它不是垃圾,他们是一个什么关系,什么关系,那现在来看。
04:27
啊,我们来画个图吧。C。CTR画个图,我们这来干嘛呢,把这代码啊,我先给它清除一下。这些东西呢,我先都给它清除掉。对象呢,我就留一个,我先不改,待会再改啊,刚才我们的代码啊,我不写创建类的了,我直接来写我们代码直接来一个A等于一个这个A是不是调用这么一个呀,也就是我调用A这个类来创建了一个对象,那首先变量名叫做什么?变量名叫做A啊,变量名叫做A,然后这个对象我是不是需要在这个内存里边来创建呀,哎,来创建,所以这里边它现在类型是A类的一个实例,我加一括号表示它是一个A类实例,然后是不是有一个内存地址啊,诶类型就是什么?类型就是A啊,类型就是A,然后它里边有一个什么,有一个内幕属性,内幕属性我们不具体写了,叫做一个叉叉叉叉叉,那现在在我们变量A里边保存的是什么?保存的是不是A这个对象啊,所以在A变量A里边,它指向的地址是0X123,所以现在变量A相当于有一个指针,它指向了我们的这个内存当中的这个对象,现在是不是这样一个关系啊,是这样一个关系,那现在这个东西它是不是垃圾是不是。
05:54
垃圾,注意现在这个对象它不是垃圾,哎同学说老师你怎么就判断它不是垃圾了,那注意了,我们来说一下怎么就是垃圾了,哎,那在我们的程中,在我们这个程序中,哎,没有被引用的对象就是什么呢?就是垃圾啊,没有被引用的对象就是垃圾,那现在我问你,我A这个对象它有没有被引用,很明显是不是被引用了,它被A这个变量进行了引用,也就是说它这个对象一在没在用再用,所以它是不是垃圾,所以这个东西它不是垃圾,那怎么就变成垃圾了,那注意了,看着了,我这里边,我在这来写一个A等于一个这个,那哎,A等于个,那我写了一个A等于钠,那现在来看我们的代码怎么体现,在这直接写一个A等于一个氮,现在A的值变成了,A的值变成了,那也就是说现在我们这个A这个。
06:54
那变量和这个对象的连接就干嘛了,就已经被我们干嘛了,切断了,因为它现在指向的是那而不是什么这个对象,那现在他还有没有连接了,没有连接了啊,没有连接了,那好,那现在问你这个对象他是不是拉地。
07:11
诶,它就是垃圾,为什么?因为没有任何的变量,没有任何的属性对它进行引用,那此时此刻它就是什么呀,就是垃圾,那这里边我们来说一下。我们这将A。哎,变成什么呢?哎,变设置为了这个呐,哎此时。哎,没有任何的这个变量,对我们这个什么呀?哎,对我们这个A这个对象进行已经。那注意啊,我这说这个A对象就是指的它啊,就是指的它,我们没有再去单独创建,就指的是指它,因为我们每只因素创建一个新的对象,但是在这里我指的指的就是这个对象啊,此时没有任何变量对我们这个A这个对象进行引用,那它就什么呢?哎,它就变成了。
08:03
什么呀,哎,变成了垃圾。哎,变成了垃圾,懂这意思吧,哎,现在它就是垃圾对象,那其实你很简单很好理解,那现在没有变量对对象进行引用,这个对象我们是不是也用不了啊,那用不了了就变成什么呀?哎,变成垃圾了啊,就变成垃圾了,好,那垃圾怎么办啊,垃圾怎么办?那注意了,现在它是垃圾,那如果我这么写啊,我这来写一个B等于A,那这个时候它还是不是垃圾。还是不是垃圾了,哎,注意就不是垃圾了,为什么?因为你在这虽然让A等于难了啊,虽然让A等于难了,但是是不是还有B去引用它了,哎还有B去引用它了,所以这个有如果有这个代码的话,那它就不是垃圾,因为还有变量对它进行引用,如果没有它就没就一个A对它进行引用,而这时候你把它设成奈,那它是不是就是垃圾了,哎就是垃圾了啊所以注意在程序中没有被引形的对象就是垃圾,那这种垃圾对象过多以后,这种垃圾对象过多以后会什么呢?哎,会影响到我们这个程序的一个运行的一个什么呀?诶运行的一个性能啊运行性能,所以什么呢?诶所以我们诶必须进行及时的什么呀,诶垃圾回收啊,垃圾回收,那所谓的垃圾回收就是什么呢?诶就是将我们这些垃圾对象从我们什么呀?诶从我们这个内存中删除啊所谓的垃圾回。
09:31
说就是将我们这个内存项从内存中删除,那现在问题来了,那我要怎么去删这个对象了,这个对象现在我都看不见了,我要怎么删啊,我要怎么删,那注意了,这里边我们来说一下,哎,那我们的Python和我们这些C语言,C学家这些语言它不一样,我们的Python什么呢?哎,在我们这个Python中有什么呢?诶有自动的垃圾回收机制啊,有自动的垃圾回收机制,它会什么呢?它会自动将这些,哎没有被。
10:05
引用的什么呀?对象删除啊,它会自动将这些没有被引用的对象删除,所以什么?所以我们不用手动处理垃圾回收啊,所以我们不用手动处理垃圾回收,所以注意像垃圾回收这个事儿,在我们拍YTH子里边,我们就省事了啊,我们不用说你手动去把这东西给它回收了干嘛?拍YTHON1看这个对象没人用了,它会干嘛?它会自动回收啊,它会自动回收,那我们要怎么来看这个过程啊,怎么来看这个过程,那注意了,在我们的Python里,我们说了这个in it,它是一个特殊方法,对吧?它是一个特殊方法,在对象对象创建以后,它是不是会调用in呀?哎,会调用in,那其实和in有点类似的,还有一个特征啊,我们叫什么呢?叫做一个DEF,我们叫做一个下划线,叫做一个delete啊,叫做一个delete delete是什么?哎,Delete它是一个什么呀,特殊方法,或者可以叫魔法方法,魔术方法,特殊方法它会什么呢?它会在我们对象被被圾回收前调用,诶被垃圾回收前调用,哎,我们现在先看看它调不调用啊调用。
11:21
直接来啊,我在这我们怎么看呢,我就写一个啊,写一个print print叫什么呢?哎,这个A这个对象。删除。被删除了,然后在这我来把这self也打印一下,这是刚才我们删除的那个对象,现在来看啊,我现在我先不写这个A等于now啊,我先不设置A等于now这个时我这一执行走一个,首先看有没有执行比delete,哎并没有执行比delete,证明A这个对象有没有删除,没有删除,为什么?因为刚才我把A等于none给注掉了,注掉以后它还是不是垃圾了,不是垃圾了就不会被删除啊,不会被删除好,那现在我把这个井号去掉,现在是不是又设置A等于那了,哎,设置A等于那了,那这个时候它是不是就变成垃圾了,哎,变成垃圾这个时候我们再来执行,我们来看走一个,看完了是不是显示A对象被删除了,哎,A对象被删除了,也就是说,当我们把这个变量A设成慢的时候,我们的Python它自动将我们这个对象干嘛了,回收了啊,它自动将这个对象回收了,也就说这个对象已经被什么了,哎,已经被删除了啊,已经被删除了,那通过这个方法我们是不是就可以看到我们这的对象被回收啊,哎,那注意了,看着啊,我这写一个。
12:37
B等于A。那现在我是不是又。哎,使用一个变量B来干嘛呢?哎,来引用我们这个A对应的一个什么呀?哎,A对应的一个这个对象。哎,A对应的对象,那这个时候注意了,现在我让B等于A了,我让B等于A了,也就是说现在是不是有两个变量在引用这个对象啊,那这个时候我设置成A等于钠,这个东西还会不会被删除了?哎,那注意这个时候它是干嘛了?哎,不会被删除了,因为还有B对它进行引用吧,那你要想删怎么办?我直接来一个B等于什么呀?哎,B等于捺这一保存我们一执行是不是就这时候就删了,哎,这时候删了,因为现在两个变量是不是都是那了,哎,都是那了,所以这块一定要注意它是怎么判断是不是垃圾的,没有东西对它进行引用了,它就是垃圾,否则它就不是。哎,那同学说了,那老师我用的是这个delete行不行啊?比如说在这我用一个delete a,它能不能。
13:37
能不能行啊,能不能行,我们来看一下这一直行来有没有删没有删,比delete的A也是一样,注意比delete是删的是什么,删的不是对象,删的是变量,你用比delete a只是把这个变量给删了,有没有把对象删了呀,没有,同样还是有B这个变量在引这个对象,所以如果你要删的话,你把两个都删了,比delete一个B这一执行走一个是不是才被删除,哎,才被删除啊,所以注意这一块我们怎么来判断我们这个垃圾这个对象啊,垃圾对象这里边注意了,只要没有被变量引用的就是垃圾,是垃圾就会被自动删除,删除之前它会调用这个什么呀,比delete这个特殊方法,哎,那你现在来看我们又说了两个特殊方法了,但是比例的这个东西我们一般不会用,你知道有呃知不知道其实都无所谓,但是这个东西用的其实特别特别的什么呀,少你了解一下,通过它我们可以看到我们这个对象。
14:27
被删除啊,对象被删除,好,那接着我们再来看,那我为什么这要加一个这个呢?我们来看效果啊,这时候我现在按回车啊,按回车走一个,你发现什么了?是不是A对象也被删除了,哎,A对象也被删除了,这是为什么呀?哎很好理解,当我去执行引破的时候,我在27项,我没有输入回车的时候,程序是不是在持续运行当中,并没有结束啊,哎,并没有结束,对象当当然不删除,但是当我敲了回车以后,我们的代码是不是会从27行往后执行啊,而后边还有没有了,没有了,没有了就意味着程序结束了,程序结束了呢?它里面的对象还有没有用了,哎,就没用了,所以它对对象会自动删除,所以当我们程序结束的时候,这些对象也会被自动删除啊,自动删除好,那这个就是我们说的垃圾回收,那这个东西呢,主要是知道一下,了解一下,你知道有这么一个东西,它会自动去回收你的什么呀?哎,这个垃圾对象就OK了啊,那这里边我们来停一下。
我来说两句