为什么Python中的集合Set里面只能存放不可变对象?

问题来源:

撰写本篇文章的原因是crash的提问:

37ac9f8c547940a68c428b4b8b4cdd6f.jpg

 碎碎念:

比较巧合的是博主下午第二节课体育课下雨,老师创造性地安排我们在体育馆里面坐成一排看女排。所以博主可以趁机研究一下。

解答:

集合介绍:

首先我们知道集合set()其实是Python的基础数据结构,如同列表,字典,元祖一样。set()的特点主要有两点:一是他是去重的,同样的元素只会存在一个;二是他是一个可变数据结构,我们可以对集合增加元素,删除元素。

但是,为什么他里面的元素必须是不可变的呢?

引经据典:

Python的好处就是有官网(你说是吧C++),所以博主先去了官网查了查。

图一:关于set元素的说明:

d83131e01b7b4174999bda8966760e96.jpg图二:关于可哈希的说明9265ba536aa94c88bb980aa74d138f79.jpg

 翻译软件用的就是edge自带的bing翻译。

Python官网关于set元素的docs

Python官网关于 可哈希 的docs

对问题的解释:

阅读官网中不难发现,在Python中比较集合中是否有相同的元素的方法是对比他们的哈希值。

那么什么是哈希呢,建议自行搜索,但简单地,不严谨地说,哈希是一种算法,可以把可能很大的一个对象提取一个很小的特征值,使得他们(几乎)唯一对应,并且可以被单向推导(原数据->特征值)。

所以,由图一可以看到,集合元素的要求是可哈希的,否则就不能达到集合去重的目的。

而由图二又可以看到,可哈希的要求就是数据不可变。(也是,要是变来变去的,那还怎么计算特征值呢!)

最后,我们可以推导出结论:集合里面必须都是不可变的数据元素!

免责申明:

以上内容皆是刚刚学习,完全有可能是不全面的,错误的,请各位看官指正。

另外,如果你没听懂,我晚上会单独给你讲:)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小岛上的恨雨寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值