Python 的映射数据类型有哪些?零基础小白入门学习必看
1 映射类关系
Python 的 collections.abc 模块内拥有 Mapping 和 MutableMapping 这两个抽象基类,它们为 dict 和其他类似的类型提供了接口定义。
mutable /ˈmjuːtəbl/ adj. Capable of or subject to change or alteration.
它们之间的类关系如下图所示:
箭头从子类指向父类,抽象类和抽象方法的名称以斜体显示。
首先是 Container、Iterable 与 Sized 三大接口,接着 Mapping 接口在继承了前面三大接口的基础上,又定义了一些自有接口。
这些接口定义了构建一个映射类型所需要的接口与方法。
2 判定映射类型
可以通过 isinstance() 方法来判定某个对象是不是广义上的映射类型:
import collections
import logging
logging.basicConfig(level=logging.DEBUG, format='%(levelname)s - %(message)s')
my_dict = {}
result = isinstance(my_dict, collections.abc.Mapping)
logging.info('result -> %s', result)
复制代码
运行结果:
INFO - result -> True
复制代码
3 可散列的数据类型
Python 标准库里的所有映射类型都是利用 dict 来实现的,它们的键都必须是可散列的数据类型。
可散列的数据类型指的是:在这种数据类型对象的生命周期中,它的散列值是不变的。它会实现 __hash__() 方法与__qe__() 方法,后一种方法是用来与其他键做比较。如果两个对象的散列值相等,那么就可以判定这两个对象相等。
原子不可变的数据类型(如:str、bytes 和数值类型)都是可散列数据类型。frozenset 中只能容纳可散列类型,因此也是可散列数据类型。
frozenset() 会返回一个冻结的集合,冻结后集合不能再添加或删除元素。
而元组比较特殊,只有当一个元组中所包含的元素都是可散列类型时,它才是可散列的。Luciano Ramalho 举了一个示例来说明这一点。
tt = (1, 2, (30, 40))
logging.info('hash(tt) -> %s', hash(tt))
tf = (1, 2, frozenset([30, 40]))
logging.info('hash(tf) -> %s', hash(tf))
tl = (1, 2, [30, 40])
logging.info('hash(tl) -> %s', hash(tl))
复制代码
运行结果:
INFO - result -> True
INFO - hash(tt) -> 8027212646858338501
INFO - hash(tf) -> 985328935373711578
TypeError: unhashable type: 'list'
复制代码
示例中可以看到:元组内包含了一个非散列的列表,就会抛出 TypeError 异常。
一般情况下,用户自定义类型的对象都是可散列的,散列值就是这些对象 id() 函数的返回值,因此这些对象在比较的时候都是不相等的。
本文章素材来源于网络,如有侵权请联系删除。
Python 的映射数据类型有哪些?零基础小白入门学习必看的更多相关文章
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
		
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
 - 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建
		
salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建 VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...
 - 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
		
salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable 本篇知识参考:https://developer.salesforce.com/trailhead/for ...
 - 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
		
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL) salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...
 - 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
		
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
 - 【转载】salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载
		
salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载 目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新 ...
 - salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载
		
目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新公司,主要做的就是salesforce,不过当时想要看一些相关资料确实比较难.为了避免想要零基础学习的人 ...
 - salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
		
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
 - 零基础小白入门IT开发指南
		
先自我介绍以下,本人是一枚刚毕业不到两年的某一线城市的程序员,本科阶段专业是计算机科学与技术.从大四开始出去实习到现在的编码经验也有快2年半了,两年半的时间包括实习在内任职过有4家公司,包括一家互联网 ...
 
随机推荐
- hdu6704 2019CCPC网络选拔赛1003 K-th occurrence 后缀自动机+线段树合并
			
解题思路: fail树上用权值线段树合并求right/endpos集合,再用倍增找到待查询串对应节点,然后权值线段树求第k大. #include<bits/stdc++.h> using ...
 - vue引入 lodash
			
vue main.js引入 // main.js 全局引入lodash import _ from 'lodash' Vue.prototype._ = _ // 使用 this._.debounce ...
 - 官网安装Python包太慢?教你三种下载安装方式-PiP、conda、轮子,教你三种Pytorch的下载安装方式,保证你再也不用出现Error
			
上一期我们介绍了CUDA下载安装以及其总结,这一期教大家如何在Anaconda中使用CUDA来进行加速.神经网络依赖cuDNN的下载安装,以及下载和安装Pytorch-GPU安装包的三种方式(cond ...
 - Leetcode 全排列专题(更新ing)
			
总览 涉及到的题目有 题号 名字 难度 Leetcode 60 第k个排列 中等 Leetcode 46 全排列 中等 待更新...... Leetcode 46 全排列 题目 基础题 给定一个 没有 ...
 - 支持MySQL数据库的agumaster版本
			
下载地址:https://files.cnblogs.com/files/xiandedanteng/agumaster20200501.zip
 - 在Python程序中执行linux命令
			
import commands print commands.getstatusoutput('ls') 输出: (0, '1.py\nwork.nfs') 参考文档: https://blog.cs ...
 - python 手把手教你基于搜索引擎实现文章查重
			
前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦.近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制.黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联系方式从而使读者获 ...
 - pytest测试框架 -- skip跳过执行测试用例
			
跳过执行测试用例 1.@pytest.mark.skip(reason=" ") -- 跳过执行测试函数 可传入一个非必须参数reason表示原因 import pytest@ ...
 - 第11课 - enum, sizeof, typedef 分析
			
第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后 ...
 - TDengine常见问题解答(FAQ)
			
1. TDengine2.0之前的版本升级到2.0及以上的版本应该注意什么?☆☆☆ 2.0版本在之前版本的基础上,进行了完全的重构,配置文件和数据文件是不兼容的.在升级之前务必进行如下操作: 删除配置 ...