1,集合
python中的集合,可以和列表相比较,因为它们只存储key,而不存储value,但是列表有序而集合无序。同时它还可以和字典比较,因为集合和字典的实现方式一样,原因是在集合中同样不能够放入“可变对象”,还记得字典中我们说“字典的key必须要唯一”吗?唯一就表示是不可变吗?当然,在python的字典中是这样的!
2,集合的操作
理清了集合的基本情况,还是需要练习一下,比如说:CURD -_-||
看图上那中写法,集合的创建方式还是别致的。当然了,这个是在python中这么说的。
注意:
集合定义时需要使用“圆括号,然后里面传递一个list结构的参数”
集合打印出来的样子并不表示你打印的“set1”是个列表,而是python在告诉你,你的这个集合中有那么几个元素。
切记,切记!
那么问题来了,请问:我怎么知道我打印的“set1”是集合而非列表?
这个问题问的好!
一针见血!直中要害!可见功力之深厚,不知道少侠师从何处,何门何派。。。。巴拉巴拉。。。。。。。。
在这里就需要用到一个比较实用的python内置的函数了,当然了,就目前而言,我们学习了几个python的内置函数呢?
答案就像是这样:
你看,是不是也简单!
type方法:用来打印一个变量的类型
同样,也可以对集合进行增,删,我们截(画)个图来看看:
至此,集合的学习就结束了?
(⊙o⊙)…不!
有没有发现,我并没有说你可以对集合进行“改”操作?
那能不能对集合进行“改”操作呢?
首先要明确,你想说的“对集合进行改操作”是什么意思,那通常我所指的意思是:把集合中的某个元素例如“a”变成“b”的过程,我称它是“”对集合进行改操作。
但是,这里有个前提,你准备更改某一个元素,那么前提你得先找到它!
那么问题来了?在集合中怎么找到一个元素?
Think........................................................................................................
所以说,由于集合是无序的,那么通过下标来访问集合的元素是不可能的,可不可以通过key来找呢?
答案是否定的!
因为集合中就存储了一个key,你想找谁?
所以说:实际上,我们无法对一个集合的元素做出修改!
3,集合的集合操作
集合的集合操作,讲求的是:并,交,差
问一个问题:集合中的元素可不可以重复?(←__← 呵呵)
这样呢,集合的操作就告一段落了!
同时呢,关于python基础相关的变量,常量,基本数据类型和几种扩展数据类型的学习和相关的基本操作,就学习
完~\(≧▽≦)/~啦啦啦
好好好,鼓掌鼓掌 ^_^ ^_^ ^_^
4,论对象的可变与不可变
要时刻牢记一句话:python中对象的创建是以内容为主,而非“变量”!
在讨论之前需要普及一个函数:id , 用来得到一个变量的内存地址
有什么用呢?
我们都知道,变量最终是要存入到内存中的,而内存是编了号的,所以,一个变量在内存中就会有一个唯一的编号和它对应!
使用方法我们还是画个图来说一下,就像是这样:
在python中,当你创建一个“内存中没有的东西”的时候,python才会为它重新分配内存,如果说你创建的一个东西,之前在内存中已经存在过了,那么python会把你的变量指向这个已经存在的东西,而不是重新分配内存。
这也就是我说的,python中分配内存是以“内容为准”而非“变量”!
如果你不理解,那么请看下面这个例子:
就像上面看到的,如果是在其它的编程语言中,变量“varx”虽然经过重新赋值,但是它在内存中只有一份。也就是说,即使经过重新赋值,“vax”的内存地址是不变的,对吧?
但是在python中,如果你能套用上面我说的“准则”,那么也许你就猜到了“结局”
对,就是这样!
再次理解理解上面哥的“准则”,那你看下面这个例子,是不是就清晰多了呢?注意:变量名可是变了的(⊙o⊙)哦
有了上面的基础,现在来看看关于集合、字典和元组中的key不可变,是个什么意思。
比如说集合,就像是这样:
你可能会惊讶,不是说集合的key不可变吗?怎么还能放个变量呢?而且。。。。。而且。。。。集合的元素值不是变了吗?
实际情况是,变量“varx”是个小婊砸,它可以一会儿指向“aaa”这个对象,一会儿指向“bbb”这个对象,而它本身没发生变化,而集合则很忠贞,它永远找的是变量“varx”指向的真正的内容,当它发现第二次集合的元素的内容和第一次的有不同的时候,它本身不会发生变化,而是“硬生生的弄出一个分身”!然后就成了你看到的那样子!
好了,一下说那么多,确实挺累的!
留个作业:如果你在集合中,放一个列表会出现什么情况?解释下原因看看!
5,补充:关于python中的比较,is or ==
python中用 == 来比较两个变量的值是否相等,而通过关键字 is 来比较两个变量是否是同一个对象,也就是两个变量是否指向同一块内存,也就是两个变量的 id 值是否相等!
那,结合已有经验,你能否猜中这个的结局?
是啊,它们就是一个 True 一个 False ( ⊙ o ⊙ )啊!
没有错啊,怎么啦?