(Python学习4)List对象

1、PyListObject对象PyObject_VAR_HEAD中的obsize表示该list对象含有的元素个数,而allocated表示该list对象占用的内存空间。ob_item实际指向一个指

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1、PyListObject对象

typedef struct {  
    PyObject_VAR_HEAD         
    PyObject **ob_item;  
    Py_ssize_t allocated;  
} PyListObject;  
# 何问起 hovertree.com

PyObject_VAR_HEAD中的obsize表示该list对象含有的元素个数,而allocated表示该list对象占用的内存空间。ob_item实际指向一个指针数组,该数组中的每个指针指向真正的PyObject。

(Python学习4)List对象

 

2、PyListObject对象使用
创建时,可指定大小,据此开辟元素列表所需内存。

op->ob_item = (PyObject **) PyMem_MALLOC(nbytes);  
memset(op->ob_item, 0, nbytes);  
# 何问起 hovertree.com

新建list对象后,可插入、添加、删除元素。若allocated不足,可自动申请内存空间。
Python中list的内存增长模型如下:
0, 4, 8, 16, 25, 35, 46, 58, 72, 88
实现方式为:

new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);  
# 何问起 hovertree.com

删除list对象时

i = Py_SIZE(op);  
while (--i >= 0) {                  // 逐一减小对真实PyObject对象的引用  
    Py_XDECREF(op->ob_item[i]);  
}  
PyMem_FREE(op->ob_item);            // 然后释放元素指针列表  

而该List对象是否销毁,如下。

3、PyListObject对象缓冲池

#define PyList_MAXFREELIST 80  
static PyListObject *free_list[PyList_MAXFREELIST];  

free_list是指针数组,指针指向list对象。
(Python学习4)List对象

 

创建List对象时:

if (numfree) {                             #如果free_list有空闲,直接指向  
    numfree--;  
    op = free_list[numfree];  
    _Py_NewReference((PyObject *)op);  
} else {                                 # 否则新开辟内存空间  
    op = PyObject_GC_New(PyListObject, &PyList_Type);  
}  

删除List对象时:

if (numfree < PyList_MAXFREELIST)        # 如果有空余空间,将list对象放入free_List  
    free_list[numfree++] = op;  
else                                     # 否则直接销毁  
    Py_TYPE(op)->tp_free((PyObject *)op);  

# 何问起 hovertree.com

转自:http://hovertree.com/h/bjaf/pythonlist.htm

推荐:http://www.cnblogs.com/roucheng/p/pythonyunsuan.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120546.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • python垃圾回收机制原理

    python垃圾回收机制原理#python垃圾回收机制详解一、概述:  python的GC模块主要运用了“引用计数(referencecounting)”来跟踪和回收垃圾。在引用计数的基础上,还可以通过标记清除(markandsweep)解决容器(这里的容器值指的不是docker,而是数组,字典,元组这样的对象)对象可能产生的循环引用的问题。通过“分代回收(generationcollection)”以空间换取时间来进一步提高垃圾回收的效率。二、垃圾回收三种机制  1、引用计数  在Python中,大多数对象的生命周

  • 神经网络轴承故障诊断_一维卷积神经网络详解

    神经网络轴承故障诊断_一维卷积神经网络详解基于一维卷积神经网络的滚动轴承故障识别提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录基于一维卷积神经网络的滚动轴承故障识别一、数据预处理二、模型搭建三、使用步骤1.引入库2.读入数据总结一、数据预处理采用美国凯斯西储大学(CWRU)的开放轴承数据库的样本进行实验分析,轴承故障产生的实验台如下图所示。使用电火花加工技术分别在轴承的内圈、外圈和滚动体上引入单点缺陷,故障尺寸分别为7、14和21in,以48kHz采样频率采集不同负载下的故障轴承振动数据用于实验分析。

  • 二叉树的一些性质图解

    二叉树的一些性质图解树的介绍1.树的定义树是一种数据结构,它是由n(n&gt;=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:(01)每个节点有零个或多个子节点;(02)没有父节点的节点称为根节点;(03)每一个非根节点有且只有一个父节点;(04)除了根节点外,每个子节点可以分为多个不相交的子树。 2.树的基本术语若…

  • NTP时间服务器简介

    NTP(NetworkTimeProtocol)网络时间协议,工作在UDP的123端口上。是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(局域网上与标准间差小于1毫秒,互联网上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP服务器NTP服务器提供准确时间,首先要有准确的时间来源,这一时间…

  • 你也可以成为VTuber

    你也可以成为VTuber

  • 手机来电通核心模块——归属地数据库设计(Winsym原创)「建议收藏」

    手机来电通核心模块——归属地数据库设计(Winsym原创)「建议收藏」说到Symbian,确实让人头痛。不仅开发平台和SDK版本众多,难以选择,而且对程序员确实要求很高,光是SymbianC++的熟悉就要花上很长时间,更麻烦的是测试和调试。模拟器只能提供一部分功能,和电话通信有关的全部要在真机上测试。很多时候,在模拟器上能跑的代码,放到真机上就不行了,这其中的心酸想必开发过得朋友深有体会。小弟我因为工程实践项目的要求,和几位嵌入式的高手一起搞了Symbian来电通项目。其实来电通项目已经有很多人做了,比较有名的是CallMaster和柳丁,但是这方面的关键技术和源码至今没有

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号