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

1,集合

python中的集合,可以和列表相比较,因为它们只存储key,而不存储value,但是列表有序而集合无序。同时它还可以和字典比较,因为集合和字典的实现方式一样,原因是在集合中同样不能够放入“可变对象”,还记得字典中我们说“字典的key必须要唯一”吗?唯一就表示是不可变吗?当然,在python的字典中是这样的!

2,集合的操作

理清了集合的基本情况,还是需要练习一下,比如说:CURD -_-|| 

133325_Mp7j_1156660.png

看图上那中写法,集合的创建方式还是别致的。当然了,这个是在python中这么说的。

注意:

集合定义时需要使用“圆括号,然后里面传递一个list结构的参数”

集合打印出来的样子并不表示你打印的“set1”是个列表,而是python在告诉你,你的这个集合中有那么几个元素。

切记,切记!

那么问题来了,请问:我怎么知道我打印的“set1”是集合而非列表?

这个问题问的好!

一针见血!直中要害!可见功力之深厚,不知道少侠师从何处,何门何派。。。。巴拉巴拉。。。。。。。。

在这里就需要用到一个比较实用的python内置的函数了,当然了,就目前而言,我们学习了几个python的内置函数呢?

答案就像是这样:

133350_YSwJ_1156660.png

你看,是不是也简单!

type方法:用来打印一个变量的类型

同样,也可以对集合进行增,删,我们截(画)个图来看看:

133755_1pC9_1156660.png

至此,集合的学习就结束了?

(⊙o⊙)…不!

有没有发现,我并没有说你可以对集合进行“改”操作?

那能不能对集合进行“改”操作呢?

首先要明确,你想说的“对集合进行改操作”是什么意思,那通常我所指的意思是:把集合中的某个元素例如“a”变成“b”的过程,我称它是“”对集合进行改操作。

但是,这里有个前提,你准备更改某一个元素,那么前提你得先找到它!

那么问题来了?在集合中怎么找到一个元素?

Think........................................................................................................

所以说,由于集合是无序的,那么通过下标来访问集合的元素是不可能的,可不可以通过key来找呢?

答案是否定的!

因为集合中就存储了一个key,你想找谁?

所以说:实际上,我们无法对一个集合的元素做出修改!

3,集合的集合操作

集合的集合操作,讲求的是:并,交,差

问一个问题:集合中的元素可不可以重复?(←__← 呵呵)

150637_S7jl_1156660.png

这样呢,集合的操作就告一段落了!

同时呢,关于python基础相关的变量,常量,基本数据类型和几种扩展数据类型的学习和相关的基本操作,就学习

~\(≧▽≦)/~啦啦啦

好好好,鼓掌鼓掌 ^_^ ^_^ ^_^

4,论对象的可变与不可变

要时刻牢记一句话:python中对象的创建是以内容为主,而非“变量”!

在讨论之前需要普及一个函数:id , 用来得到一个变量的内存地址

有什么用呢?

我们都知道,变量最终是要存入到内存中的,而内存是编了号的,所以,一个变量在内存中就会有一个唯一的编号和它对应!

使用方法我们还是画个图来说一下,就像是这样:

161156_FJLr_1156660.png

在python中,当你创建一个“内存中没有的东西”的时候,python才会为它重新分配内存,如果说你创建的一个东西,之前在内存中已经存在过了,那么python会把你的变量指向这个已经存在的东西,而不是重新分配内存。

这也就是我说的,python中分配内存是以“内容为准”而非“变量”!

如果你不理解,那么请看下面这个例子:

163728_FmC5_1156660.png

就像上面看到的,如果是在其它的编程语言中,变量“varx”虽然经过重新赋值,但是它在内存中只有一份。也就是说,即使经过重新赋值,“vax”的内存地址是不变的,对吧?

但是在python中,如果你能套用上面我说的“准则”,那么也许你就猜到了“结局”

对,就是这样!

164005_HlWh_1156660.png

再次理解理解上面哥的“准则”,那你看下面这个例子,是不是就清晰多了呢?注意:变量名可是变了的(⊙o⊙)哦 

164317_pIdz_1156660.png

有了上面的基础,现在来看看关于集合、字典和元组中的key不可变,是个什么意思。

比如说集合,就像是这样:

170416_muSY_1156660.png

你可能会惊讶,不是说集合的key不可变吗?怎么还能放个变量呢?而且。。。。。而且。。。。集合的元素值不是变了吗?

实际情况是,变量“varx”是个小婊砸,它可以一会儿指向“aaa”这个对象,一会儿指向“bbb”这个对象,而它本身没发生变化,而集合则很忠贞,它永远找的是变量“varx”指向的真正的内容,当它发现第二次集合的元素的内容和第一次的有不同的时候,它本身不会发生变化,而是“硬生生的弄出一个分身”!然后就成了你看到的那样子!

好了,一下说那么多,确实挺累的!

留个作业:如果你在集合中,放一个列表会出现什么情况?解释下原因看看!

5,补充:关于python中的比较,is  or  ==

python中用 == 来比较两个变量的值是否相等,而通过关键字 is 来比较两个变量是否是同一个对象,也就是两个变量是否指向同一块内存,也就是两个变量的 id 值是否相等!

那,结合已有经验,你能否猜中这个的结局?

171026_mGq6_1156660.png

是啊,它们就是一个 True  一个 False ( ⊙ o ⊙ )啊!

没有错啊,怎么啦?

---------------------------------------------华丽的分割线---------------------------------------------------

明天周日,不上班!



转载于:https://my.oschina.net/u/1156660/blog/368530

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值