您的位置:首页 > 编程语言 > Python开发

python(四)字典,集合,可变与不可变对象(下)

2016-05-26 16:24 441 查看
摘要 python中的字典类似于js中的json,其实就实现方式来看确切的说python中的字典才真正的像php中的数组,所以我说的list和php中的数组类似及dict和json类似,仅仅是指形式上~

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 ⊙ )啊!

没有错啊,怎么啦?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: