字典键的特性
字典值可以是任何的 python 数据类型,既可以是标准的对象,也可以是用户定义的,但键不行。
- 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住:
>>> dict = {'Name': 'Lucy', 'Name': 7, 'Class': 'First'} # 键Name出现了2次
>>> dict['Name']
7 # 只记住了后面一个Name的值
- 键必须不可变,可以用 数字、字符串、元组,而用列表就不行
>>> dict = { ['Name']: 'Lucy', 'Age': 7, 'Class': 'First' } # Name键使用了列表类型的数据
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
dict = { ['Name']: 'Lucy', 'Age': 7, 'Class': 'First' }
TypeError: unhashable type: 'list' # 报错了,类型不能被哈希
>>> dict = { {'Name'}: 'Lucy', 'Age': 7, 'Class': 'First' } # Name键使用了集合类型的数据
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
dict = { {'Name'}: 'Lucy', 'Age': 7, 'Class': 'First' }
TypeError: unhashable type: 'set' # 报错了,类型不能被哈希
到底什么是哈希Hash?
定义:
Hash一般翻译为散列,还有音译为哈希,本文我们统称为哈希(这么叫好听,哈希=散列),通过百度以及谷歌都没有直接找到Hash的定义,而是找到了一些相关的概念,哈希算法,哈希函数,哈希表等概念。
我所理解的哈希是指一个过程,这个过程就是把任意长度的输入,通过哈希算法,变换成固定长度的输出,所输出的称为哈希值。这种变换是一种压缩映射,也即哈希值所占的空间一般来说远小于输入值的空间,不同的输入可能会哈希出相同的输出(概率很小)。
哈希函数、算法
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法 ---《数据结构与算法分析》
哈希表
散列表:(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
特点:
如果两个哈希值是不相同的(根据同一函数),那么这两个散列值的原始输入一定是不相同的。
如果两个哈希值相同,两个输入值很可能(极大概率)是相同的,但也可能不同,这种情况称为“哈希碰撞”
抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。
它是一种单向函数是“非对称”的,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。
部分引自:https://gist.github.com/arrayadd
作者:腾飞君
来源:CSDN
原文:https://blog.csdn.net/qq_34858648/article/details/79545622
版权声明:本文为博主原创文章,转载请附上博文链接!