00:00
回家上节课内容啊,上节课研究的是这个删除DL,以前删除的是标识符,上次呢,可以删除列表对象里的索引index,还有切片s slic.删除呢?要摘菜一样,摘出一些菜扔了,扔了搁哪儿呢?看一个例子。我们定义了hero list, 刘关张进行输出,输出之后呢,我把一帽2删除,就变成什么,变成刘备和张飞了,那么关羽去哪儿了呢?不知道,但是呢,我们从这个global frame就这个话框里的只能访问一个东西叫hero list, 那he list里面指向的对象里边已经找不着关羽了。哎,给弄丢了,那我不想弄丢,想把它还原回来,想把它存住了,行不行呢,我这回呢,还是先声明一个列表,然后呢输出列表。然后把这个1毛2啊付给一个变量。这就存住了是吧,存住了之后再删除,删除之后呢,我们不管是输出原列表还是输出新列表。他都没丢是吧?存着呢,那修改会影响到原始的列表吗?比如说我要怎么样呢?我要在这儿再编辑这个代码,刘关张输出之后呢,再看看他的选中的列表,选中谁呢?选中关羽,把选中的关羽从原列表删除。
01:17
删除之后呢,我们在新列表里头添加赵云,注意新列表里添加赵云对原列表有没有影响呢?没有任何影响,新的列表通过切片获得的这个列表跟列表就完全不相关了,那如果我就想让列表相互关联,相互影响呢?我们做这么一个例子,首先定义一个字符列表。是OE的5个字符。然后呢,把字符列表一赋给字符列表二,我们这个可以看到,这时候字符列表一也好,字符列表二也好,它指向同一个位置,也就是说这个时候不管是我给字符列表一添加一个问号,还是我给字符列表二添加一个叹号,它都会影响到这个空间,也就是说现在就是一改全改,一改全改,那他为什么会一改全改呢?
02:05
我们看一下它的这个ID,哎。Identifier首先是定义了一个。字符列表,然后输出它的内存地址。然后把这个字符列表1付给字符列表2。赋值之后呢,我们发现它指向同一个位置,指向同一个位置之后呢,我们再去输出这个字符列表二所在的这个内存,我们可以看到第一个内存跟第二个内存完全相同,也就是说他们指向同一个位置,也就是说对一的任何操作都会影响2,对二的任何操作呢,都会影响一,一和2就是一回事。都是一回事儿,就是起了个别名儿,不管是一也好,二也好,他们都是对这个地址的引用,那我能看到这个地址被引用多少次吗?我可以看这样一个代码。首先呢,我们引入一个包,这个包呢是system,然后呢,我定一个列表一字符列表1,让它是OE这个字符串转化成的列表。
03:05
然后我们看一下system reference count, 得到它的引用次数,哎,这是一个内建的函数,谁的引用次数呢?就是C list1它的引用次数,我们可以看到它被引用了2次。诶,他为什么被引用两次,你这儿不是写了吗?他。被引用了一次还没有,为什么他被引用2次呢?我不明白喊救命对谁喊救命呢的,Get reference count, 得到引用次数,救命。那我们可以看到它返回的是什么呢?返回的是引用对象的次数,这个次数呢,一般来说one higher you might expect, 比你预计的呢要高1。因为什么呢?因为在你调用这个函数的时候。他就把这个变量作为一个参数也被引用了一次,也就是说你这儿引用了一次没问题,但是你在调用这个函数的时候,这个东西又被引用了一次,所以它是2。
04:06
所以它是2为应了两次,那如果这个时候我让C42=C里斯1会怎么样呢?我再看看这个它引用次数C了一次1,哎,这回新的引用就来了,C了一次一一次C了二一次调用本身一次总共三次对吧,那如果我不引用那个地儿了,我我我让他是个空列表。然后我再看看C1怎么样呢,它就减少一次饮用。哎,减少一次饮用,这样呢,那我们现在明白了,刚才对。列表一的操作完全都会用到列表二上,列表二的操作也完全会用到列表一上,他们根本就是一个地儿是吧?就是对同一个地儿两次引用,两次引用,所以一改全改,那我不想让它列改全改,我想分分别的,那可以吗?我们可以试试这个东西,有一个数字列表一二三,然后把这个数字列表不是直接付给N利斯2,而是呢,把它作为参数在新构造一个列表。
05:06
那这个时候我们可以看到N利42怎么样?因为你是用了构造函数,所以它就新分配一个地儿,这两个东西存在不同的地方,有不同的内存地址,互相也不会影响。那除了这个用构造函数的方法,还有什么方法可以不影响原列表吗?我们看看这个东西啊。定一个字符列表1,然后是O。然后不直接把C1付给他,直接给他不就是相当于两个是同一个地址的两次引用吗?我也不用构造函数,这次呢,我用C1本身的一个成员方法叫K。我把它拷背了一下,再赋给例42,那例S2怎么样呢?它就出现了一个新的地地方,它跟原来直接赋值不一样,还是指向新的地方,那这个时候一加问号二加叹号,它们还是不同的,这个地址是啥样的呢?C1C2地址也不相同,那肯定不相同,指向俩地儿,两个内存地址嘛,相当于给原列表做了一个副本,用的是什么呢?用的是拷贝,拷贝就是建立副本,它呢是最早是从这个书写记录来的,哎,为什么呢?以前都是手抄本儿,中世纪的时候。
06:15
抄抄书就叫拷贝,拷贝后来不用手抄了,用复印机了,用踏蓝纸了,也是拷贝。胶片时代呢,有这个拷贝,比如说影片的拷贝,就是一模一样的复制,做一个副本,制片公司当时的产品就卖的是什么呢?卖的就是拷贝。那到电脑时代复制文件的时候也用的是拷贝,拷贝文件啊之类的东西,这次呢,我们看了这个列表赋值的两种形式,第一个是将列表直接赋值,那他们两个就指向同一个地也可以,怎么样呢?把它做个副本来赋给新列表,那是什么效果呢?他们两个就是各有各的空间,那列表能相加吗?我们下次再说。
我来说两句