python中什么样的数据类型是可散列的?

2024-04-28 16:36
文章标签 数据类型 python 散列

本文主要是介绍python中什么样的数据类型是可散列的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         python里什么样的数据类型是可散列的?可散列也就是可以作为映射(字典、集合)里的键。

        如果一个对象是可散列的,那么这个对象在它的生命周期内,它的散列值是不变的 ,而且这个对象需要实现__hash__方法,另外还要有__eq__方法,这样才能跟其他键比较。要注意两个对象相等,它们的散列值一定一样,但两个对象散列值一样它们可能不相等,这就是常说的散列表里的hash值冲突的情形。

       不可变类型有可能是可散列的,但可变类型是不可散列的。原子不可变类型,像str、bytes和数值型(int、float等)都是可散列的,frozenset也是可散列的,因为根据定义frozenset里只能容纳可散列类型。然后像元组这样的不可变类型,它是不是可散列的取决于它的元素是不是可散列的。像其他的可变collection类型,如列表、集合和字典都是不可散列的,因为这些对象它们的内部状态是不稳定的,它们容纳的数据元素的数目是可动态变化的,哪怕它的数据元素都是可散列的,如果根据它们的数据元素来计算它们的散列值,不同状态下,它们的散列值可能是不同的,我们希望一个对象它在的整个生命周期内它的散列值是不变的。如果非要以可变对象计算散列值,可以取它们的id值为散列值,不过要注意观察这些对象是否已经生命周期结束,一旦如此要从映射里面删除掉以该对象的id值为散列值的项。

        下面给出一个把可迭代或者字典对象变成一个可散列的元组对象的算法。

def is_iterable(x):try:iter(x)except TypeError:return Falseelse:return Truedef make_hashable(value):if isinstance(value, dict):return tuple([(key, make_hashable(nested_value))for key, nested_value in sorted(value.items())])try:hash(value)except TypeError:if is_iterable(value):return tuple(map(make_hashable, value))raisereturn value

这篇关于python中什么样的数据类型是可散列的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943726

相关文章

Python中tkinter编程入门5

在《Python中tkinter编程入门3-CSDN博客》中提到了Entry类表示输入框,用户可以在该控件中输入信息。tkinter可以通过编程实现对Entry输入框中内容进行设置、获取和删除。 1 设置Entry输入框中的内容 设置Entry输入框中的内容的代码如图1所示。 图1 设置Entry输入框中的内容 其中,第9行代码的作用是创建Entry控件,并将其保存在entry变量中;

ICode国际青少年编程竞赛- Python-5级训练场-综合练习6

ICode国际青少年编程竞赛- Python-5级训练场-综合练习6 1、 for i in range(3):Dev.step(2 * (i + 1))Dev.turnLeft()while Flyer[2 - i].disappear():wait()Dev.step(2 * (i + 1))Dev.turnRight()while Dev.x != Item[i].x:

python实现幸运大转盘 python实现抽奖

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 幸运大转盘是一种活动形式,广泛应用于各种场合,如商业促销、展览活动、企业庆典以及体育课堂等,旨在增加活动的趣味性和参与度。以下是对幸运大转盘的详细介

python微信小程序 uniapp高校打印店预约服务系统

本系统是针对校园自助打印开发的工作管理系统,包括到所有的工作内容。可以使自助打印的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和用户、店长三个身份。管理员可以管理系统里的所有信息。店长可以发布服务信息和查询用户的预约信息。用户可以浏览打印服务和打印店、预约打印以及管理预约信息、收藏信息。    开发语言:Python 框架:flask 同时

ICode国际青少年编程竞赛- Python-6级训练场-递归入门

ICode国际青少年编程竞赛- Python-6级训练场-递归入门 1、 def recur(n):# 边界条件if n<1:return# 额外动作Dev.step(n)Dev.turnRight()# 递归调用recur(n-1)recur(8) 2、 def recur(n):# 边界条件if n<1:return# 额外动作Dev.step(n)Dev.tu

【信创】MySQL数据类型到 KingbaseES 数据类型转换

序号 MySQL数据类型 KingbaseES数据类型 备注说明 (MySQL) 数值型 1 TINYINT TINYINT 有符号整数,取值范围 -128 ~ +127 2 SMALLINT SMALLINT 有符号整数,取值范围 -32768 ~ +32767 3 MEDIUMINT MEDIUMINT 有符号整数,取值范围-8388608 ~ +838860

Python——设计模式(附代码+资源下载)

目录 一、什么是设计模式 二、为什么要有设计模式 三、设计模式六大原则 📜 四、设计模式分类  五、创建型模式  1、简单工厂模式 🏭 代码示例👋 优点与缺点 ✨   2、工厂方法模式 🏭 代码示例👋 优点与缺点  ✨  3、抽象工厂模式 🏭 代码示例👋 优点与缺点  ✨  4、3种工厂模式——总结 💎 5、建造者模式 ⛏️ 代码示例👋 优缺点和适用场景 ✨  5、单例模式

使用Python实现长短时记忆网络(LSTM)的博客教程

长短时记忆网络(Long Short-Term Memory,LSTM)是一种特殊类型的循环神经网络(RNN),专门设计用来解决序列数据中的长期依赖问题。本教程将介绍如何使用Python和PyTorch库实现一个简单的LSTM模型,并展示其在一个时间序列预测任务中的应用。 什么是长短时记忆网络(LSTM)? 长短时记忆网络是一种循环神经网络的变体,通过引入特殊的记忆单元(记忆细胞)和门控机制,

Python Caffe库:深度学习高效开发利器

更多Python学习内容:ipengtao.com Caffe是一个流行的深度学习框架,用于构建和训练深度神经网络模型。Python Caffe库提供了Python接口,使得使用Caffe框架更加便捷和灵活。本文将全面介绍Python Caffe库的使用方法、功能特性以及实际应用场景,并给出详细的示例代码,帮助大家更好地了解和应用Caffe库。 安装 首先,需要安装Caffe库及其Python

ALS算法原理及python实现

1、原理篇        我们用人话而不是大段的数学公式来讲讲ALS是怎么一回事。1.1 你听说过推荐算法么        假如我是豆瓣的CEO,很多豆瓣的用户在豆瓣电影上都会对电影进行评分。那么根据这个评分数据,我们有可能知道这些用户除了自己评过分的电影之外还喜欢或讨厌哪些电影吗?这就是一个典型的推荐问题,解决这一类问题的算法被称为推荐算法。1.2 什么是协同过滤        协同过滤的英文全