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>}
相关文章
|
21天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
41 3
|
21天前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
44 3
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
86 1
思科设备巡检命令Python脚本大集合
|
2天前
|
缓存 数据安全/隐私保护 Python
python装饰器底层原理
Python装饰器是一个强大的工具,可以在不修改原始函数代码的情况下,动态地增加功能。理解装饰器的底层原理,包括函数是对象、闭包和高阶函数,可以帮助我们更好地使用和编写装饰器。无论是用于日志记录、权限验证还是缓存,装饰器都可以显著提高代码的可维护性和复用性。
17 5
|
14天前
|
缓存 开发者 Python
深入探索Python中的装饰器:原理、应用与最佳实践####
本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
29 2
|
19天前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
11 1
|
22天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
58 4
|
1月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
37 1
|
2月前
|
存储 自然语言处理 数据处理
使用Python计算多个集合的交集详解
使用Python计算多个集合的交集详解
61 1
|
2月前
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
39 0