Python中的字典与集合的底层实现原理

简介: Python中的字典与集合的底层实现原理

Python中字典与集合的实现原理

首先通过__new__方法创建对象,__init__方法进行属性绑定后,将对象添加到一个集合中,会自动调用__hash__方法的到哈希值,哈希值相等是会调用__eq__方法,会返回一个结果,如果返回结果为False怎添加成功。

class CanHash(object):
    def __new__(cls, *args, **kwargs):
        obj=object.__new__(cls)
        print(f"__new__方法创建了一个新对象id:{id(obj)}")
        return obj
    def __init__(self,value):
        print(f"__init__方法为对象绑定了attrs,id::{id(self)}")
        self.value=value
    def __hash__(self):
        print("__hash__方法被调用了")
        hash_value=hash(self.value)
        print(f'hash_value:{hash_value}')
        return hash_value
    def __eq__(self, other):
        print("__eq__方法被调用了")
        if isinstance(other,self.__class__):
            res= self.value == other.value
            print(f"hash桶内是同一个对象吗?{res}")
            return res
        else:
            print("不是同类对象,add失败")
            return False
c1=CanHash('a')
c2=CanHash('b')
c3=CanHash('c')
c4=CanHash('b')
s=set()
s.add(c1)
s.add(c2)
s.add(c3)
s.add(c4)
print(f"添加结果:{s}")
__new__方法创建了一个新对象id:139999721527712
__init__方法为对象绑定了attrs,id::139999721527712
__new__方法创建了一个新对象id:139999721209376
__init__方法为对象绑定了attrs,id::139999721209376
__new__方法创建了一个新对象id:139999721208416
__init__方法为对象绑定了attrs,id::139999721208416
__new__方法创建了一个新对象id:139999720858960
__init__方法为对象绑定了attrs,id::139999720858960
__hash__方法被调用了
hash_value:6082891539820400838
__hash__方法被调用了
hash_value:-575605371910081896
__hash__方法被调用了
hash_value:7415995645675622067
__hash__方法被调用了
hash_value:-575605371910081896
__eq__方法被调用了
hash桶内是同一个对象吗?True
添加结果:{<__main__.CanHash object at 0x7f5439a6be20>, <__main__.CanHash object at 0x7f5439a6ba60>, <__main__.CanHash object at 0x7f5439ab99a0>}
相关文章
|
13天前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
233 0
|
19天前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
111 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
20天前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
80 1
|
20天前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
85 3
|
1月前
|
存储 JSON 数据管理
Python字典:高效数据管理的瑞士军刀
Python字典基于哈希表实现,提供接近O(1)的高效查找,支持增删改查、遍历、合并等丰富操作,广泛应用于计数、缓存、配置管理及JSON处理。其灵活性与性能使其成为数据处理的核心工具。
315 0
|
1月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
234 2
|
1月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
395 0
机器学习/深度学习 算法 自动驾驶
277 0
|
1月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
663 2
|
1月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
136 0

推荐镜像

更多