00:00
好,我们回家上节课讲了这个集合,集合是一种无序的元素,唯一的容器。那么我们了解到以前是有序的容器,可改变的有序容器是列表,不可改变的是元组,那么可改变的无序容器是集合,不可改变的无序容器有没有?我们找一下这个东西叫什么?Frozen set.The freeze.冻住的意思,冻住了他是不是就不能跑了?那首先我们先看看没冻住的时候长啥样。Sa什么呀?Sa, 一个集合AB,把这个可迭代的东西放到集合里面,一个B,一个A,无需可以这样SI的一个C,那这个时候就把C放进去了,所以这个S是一个可变的是吧?没冻住的,那怎么样把它冰封住?Frozen set等于什么呢?等于。Frozen set, 它的构造函数里边放一个什么可迭代的AB,放一个可迭代的AB frozen set就是这个东西,它有什么样的方法呢?这这些方法,但是他没有爱的方法是吧?没有爱的方法,所以他没法进行修改。
01:13
没法进行修改。那集合这个东西能直接赋值吗?能不能直接复制,那比如说我们这儿有一个集合,这是Python tutor, 让它复制了,然后去Python tutor观察一下。有一个集合S1,然后呢,我把S1直接付给S2,这时候观察S1和S2的ID,然后呢,S1添加2 S1添加2什么意思呢?其实就是S2添加2,因为你是把S1的这个容器直接赋给S2,这是属于什么直接赋值对吧?所以S1添加2就是S2添加2,他们两个是一起的。那时候我不想一起怎么办呢?那我给他加一个什么呀,加一拷贝呗,加一拷贝。加以拷贝之后,我们就怎么样就可以把它变成什么呀。
02:02
变成一个各有各的空间是吧,那就用谁赋的值呢?用S1的拷贝出来的副本给S2赋的值,那S2呢,就不是S1这个地址,所以就各有各的空间嘛。S1添加一个2,那S2呢,不不受影响对吧?这个是什么?这是拷贝,那既然有拷贝的话,这个属于前拷贝,那我能不能就是看看它的这个是不是很浅呢?我们这儿给他一个元组0101后面搁搁一个01。这个时候我们可以看到这是0101,然后靠背。拷贝之后呢,我们可以看到这个是什么。这个是浅层,确实拷贝了。啊,浅层拷贝了,它可以各有各的,但是深层还是怎么样,还是有一个统一的位置,所以它很浅嘛。那我想给它伸伸伸进去行不行呢?From copy import, 这个deep copy, 那拿到这个东西之后,我们。
03:06
这块呢,就不用这个S1了,我们用什么呀,S1DEEP Co贝这个S1好运行一下这个结果,运行的结果出来呢,还是指向同一个位置。为什么呢?那就得看看这个所谓的deep Co这个这个事儿了,假如说我们把这个东西剪切。然后呢,说T等于一个什么呀,等于一个0~1,然后呢,我们T2等于。Deep copied, 那么这个时候输出一个T的ID,再输出一个第二的ID,这个时候我们可以看到T1的ID和T2的ID完全相同,虽然是地不靠北,但是对于元组来说它没有任何区别,对吧?没有任何区别,那怎么办呢?我们就远组地不靠不地步靠呗,它都指向同一位置,那我不用远组,用谁啊,用列表。
04:01
用列表行不行呢?我们尝试着去运行,直接报错了类型错误,不可哈希的类型,Lisa, 那这个列表是不可哈希类型,那什么是哈希呢?就是一个哈希方法,那它可以把一个对象变成一个数字,把它数字化,那这个列表呢?这个变量它没法具体到一个具体的数字是吧?它是个变的东西嘛,所以它就不可哈希,不可哈希。那这个不行,列表不行,元组不行,那试试最新的这个集合吧。行不行呢,集合也不行,它也是一个不可哈西的变量是吧。那集合不行,但是有这么一个东西,冰封集合。Frozen set是不是可以呢?我们试一下哈。这个是冰封集合,能不能把它伸进去,这个是指向一个地方,这回地步靠背之后,你看这个冰封集合,它就不是刚才那个冰封集火,所以深拷贝确实是深拷贝,对吧,这边也不受影响,那假如说我不用深拷贝,使用浅拷贝,那又会如何呢?是不是这个最后这个他就他就拷贝不出去呢,我们就试一下。
05:18
这回呢,我们不用吃拷贝了,用浅拷贝。浅拷贝它是什么效果啊,只拷贝浅浅的一层,它深不进去啊,深不进去,所以这就是深浅拷贝的。变化。那么我们这次呢,了解到这么一个新容器叫什么呢?冰封集合,冰封集合是不可修改的无序的容器。那集合有什么运算呢?我们下次再说o ez交枪。
我来说两句