Py实现广义表的存储逻辑

  • 数据结构学习笔记
  • 教材:严蔚敏《数据结构》

思考结果记录与分享 有不对的地方欢迎指出和探讨

本文将类比 <工程上py的List能实现的广义表> 与 <教材上中广义表> 的存储逻辑



Ⅰ PyListObject

以下还原py底层源码List的简单存储逻辑示意

在这里插入图片描述

实际上 这样看还不是特别直观
让我们把宏定义内容直接搬到PyListObeject实例创建的地方
在这里插入图片描述

现在我们可以清楚地看到一个PyListObject里头到底存了些什么
在这里插入图片描述




ⅡPyListObeject & GL

这样的存储逻辑与广义表的存储又有什么联系呢?

让我们来用py的list实现一个广义表
在这里插入图片描述

我根据上文对源码存储逻辑的理解
画出了PyList实现广义表的存储逻辑
在这里插入图片描述



根据上述逻辑图 其实可以发现
PyList实现广义表的逻辑其实和书上介绍的头尾链表存储的广义表极为相似

无论是存储原子结点或是存储表结点
头尾链表存储的广义表和PyList都是存结点的地址



Ⅲ类比PyList & GL小结

在这里插入图片描述

• 比较不同的是 Py 工程上实现的 List 实际上更灵活 能够利用 PyObject 在结
点存储任何数据类型对象(包括 int / string / list …
全部的对象都有一个共同的基类(Py 中“万物皆对象”
• Py 利用多态来实现不同数据类型集成列表的访问

References

Python内部机制-PyObject对象
Python的列表(List)的底层实现原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值