Python的映射类型介绍

dict类型是Python语言的基石,至关重要。Python对它做了高度优化,散列表是字典类型性能出众个跟本原因。

collection.abc 模块里面有Mapping和MutableMapping这两个抽象基类,他们的作用为dict和类似的类型提供形式接口。其他的映射类型,一般不会直接继承这两个抽象基类,会直接对dict就行扩展。

from collections import abc

print(isinstance({}, abc.Mapping))
print(isinstance({}, abc.MutableMapping))
打印
True
True

Python标准库里面的映射类型都是用dict实现的,有个限制是映射里的键只能为可散列的数据类型,(值没有这个限制)。

 

什么是可散列?

如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不可变的,而且需要实现__hash__()方法,还有__eq__()方法用于键的比较。散列值就是对象hash()函数的返回值。

可散列类型包括:不可变数据类型str、bytes、数值型、frozenset(frozenset的定义就是只能容纳可散列类型)、还有元组(前提是其中的元素必须都是可散列的)

t1 = (1, 2, (3, 4))# 可散列的
print(hash(t1))  

t2 = (1, 2, [3, 4])# 不可散列的
print(hash(t2))
打印
1229485614
Traceback (most recent call last):
  File "D:/PycharmProjects/hello/test2.py", line 12, in <module>
    print(hash(t2))
TypeError: unhashable type: 'list'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值