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>}
相关文章
|
9天前
|
存储 JSON 数据管理
Python字典:高效数据管理的瑞士军刀
Python字典基于哈希表实现,提供接近O(1)的高效查找,支持增删改查、遍历、合并等丰富操作,广泛应用于计数、缓存、配置管理及JSON处理。其灵活性与性能使其成为数据处理的核心工具。
191 0
|
19天前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
190 2
|
20天前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
251 0
机器学习/深度学习 算法 自动驾驶
142 0
|
1月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
384 2
|
1月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
94 0
|
1月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
44 0
|
2月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
305 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
2月前
|
数据采集 消息中间件 并行计算
Python多线程与多进程性能对比:从原理到实战的深度解析
在Python编程中,多线程与多进程是提升并发性能的关键手段。本文通过实验数据、代码示例和通俗比喻,深入解析两者在不同任务类型下的性能表现,帮助开发者科学选择并发策略,优化程序效率。
126 1
|
2月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
195 0

推荐镜像

更多