问题来源:
撰写本篇文章的原因是crash的提问:
碎碎念:
比较巧合的是博主下午第二节课体育课下雨,老师创造性地安排我们在体育馆里面坐成一排看女排。所以博主可以趁机研究一下。
解答:
集合介绍:
首先我们知道集合set()其实是Python的基础数据结构,如同列表,字典,元祖一样。set()的特点主要有两点:一是他是去重的,同样的元素只会存在一个;二是他是一个可变数据结构,我们可以对集合增加元素,删除元素。
但是,为什么他里面的元素必须是不可变的呢?
引经据典:
Python的好处就是有官网(你说是吧C++),所以博主先去了官网查了查。
图一:关于set元素的说明:
图二:关于可哈希的说明
翻译软件用的就是edge自带的bing翻译。
对问题的解释:
阅读官网中不难发现,在Python中比较集合中是否有相同的元素的方法是对比他们的哈希值。
那么什么是哈希呢,建议自行搜索,但简单地,不严谨地说,哈希是一种算法,可以把可能很大的一个对象提取一个很小的特征值,使得他们(几乎)唯一对应,并且可以被单向推导(原数据->特征值)。
所以,由图一可以看到,集合元素的要求是可哈希的,否则就不能达到集合去重的目的。
而由图二又可以看到,可哈希的要求就是数据不可变。(也是,要是变来变去的,那还怎么计算特征值呢!)
最后,我们可以推导出结论:集合里面必须都是不可变的数据元素!
免责申明:
以上内容皆是刚刚学习,完全有可能是不全面的,错误的,请各位看官指正。
另外,如果你没听懂,我晚上会单独给你讲:)