- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【麦子学院】Python 常见内置对象详解
IT 在线教育平台———麦子学院:
【麦子学院】Python 常见内置对象详解
Python 语言中,所有的东西都是对象,因此对于 python 初学者来说,搞清楚 python
对象的具体实现非常重要。
Python 中的对象主要分为类型对象和实例对象,但也不排除有同时属于类型和实例的
对象,而不管是什么对象,除了内置的类型对象外,都存在于堆上,内置的类型对象则静
态分配内存。下面我们就一起来看看 python 常见的内置对象及其实现方法吧。
1、int
int 这个对象比较简单,但还是需要重点了解,以便高效的实现。python 首先有小整
数对象。默认在[-5, 257)。如果超出范围则使用通用的缓冲池,对于大整数则有
PyIntBlock ,用来作缓冲池。一个block 大小大概为 1000 个字节,去掉头部(8 字节),
可以存 82 个整数对象。block 之间通过指针相连,首指针为 block_list ,free_list 则维护着
一条可以链表,free_list 链表的下一项由未用的 PyIntObject 的ob_type 来维持。
如果没有缓冲池可用的时候怎么办呢?这个时候 python 会调用 fill_free_list 来创建一
个新的 block ,并将其插入block_list ,再把free_list 指向这个 block 的objects 中的最后一
个元素。当某个 block 中的某个 int 被释放时,它将自己的 ob_type 指向 free_list ,并修改
free_list 等于它的地址,其实就是一个头部插入,这样把多个 block 间的objects 数组联系
起来防止出现内存泄漏。但值得注意的是小整数对象池其实也是生活在 block 里面,在是
整个 python 环境初始化的时候生成。因此,为 int 分配的内存是永远也不会被 python 释
放的,所有的 int 对象使用的内存大小和同时存在的 int 数量的最大值有关。
2、string
String 为变长对象,主要用于对变长对象内存的管理,每个 string 对象除了头部外还
保存了 hash 值(ob_shash ,避免重复计算,初始-1 )、是否已经被intern 机制处理过
(ob_sstate )、指向实际内存的指针(ob_sval) ,ob_sval 指向的应该是一段 ob_size+1 长
度的内存(为了兼容 C ,字符串要以\0结尾)。在从 char *创建 string 时还是比较直接的,
就是检查一些边界情况、初始化 hash 等,最后逐个拷贝 char。python 中有一个 nullstring
指向空字符串,通过 intern 机制共享,所以不会同时存在多个空字符串。对单个的 char ,
python 也会维持一个缓冲池。创建单个 char 的string 时,如果缓冲池里已有,则直接返
回。如果没有,根据char 创建 string ,再对它进行intern ,再存入缓冲池。
对于已经被创建的 string ,python 会维持一个 string 用来保存,如果新创建 string 已
经在这个 dict ,也就是已经被intern 机制处理过了,那么就会直接返回 dict 中的值。一般
两个相同的字符串的 id 是相同的。要注意的是,无论字符串有没有存在于这个 dict 中,
IT 在线教育平台———麦子学院:
python 都会创建一个新要 string ,原因是因为保存在dict 中只能是PyObject ,因此肯定要
创建一个 python 对象。intern 后的 string 有两种状态,mortal 和 immortal ,区别在于后者
永远不会被 gc 回收。但创建string 时使用的是 PyObject_Malloc 开头的分配函数,一般来
讲它不会每次都从 os 分配内存,而是从 python 维持的一个内存池中分配。
3、list
list 不仅是变长对象,还是可变对象。在变长头部之外 PyListObject 还保存了一个
PyObject **ob_item 指针,一个 int allocated。ob_item 就是指向实际成员的指针,
allocated 代表了 list 当前申请的内存能装多少个 PyObject ,变长头内的ob_size 则代表 list
中已有多少个PyObject。当创建一个 list 时,需要指定 list 的大小(参数size ),要申请的
您可能关注的文档
- Java 泛型 菜鸟教程.pdf
- java_Java期末复习.pdf
- java实验文档3.pdf
- jQuery $.post $.ajax用法.pdf
- java 中国象棋代码.pdf
- Limitorque_L120操作手册.pdf
- 产业经济学串讲.doc
- l电工技术杂志}2003年第2期.pdf
- 企业战略管理培训大纲.doc
- 信用评级方法.docx
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 会计学原理23版 英文版课件WildFAP23eCh05PPT.pptx
- 华为公司职类职种职级体系的划分及职业发展通道设计.pdf VIP
- 建筑解析流水别墅.pptx
- 2025届高三英语复习语法填空专题(24张PPT).pptx VIP
- 基于PLC的磨矿控制系统设计.docx
- 有限元分析论文.doc VIP
- 苏教版小学科学五年级上册第四单元《水在自然界的循环》大单元教学设计(含练习).docx
- 聚氯乙烯热收缩膜标签验收标准.doc VIP
- 2023年安徽省高中学业水平合格性考试数学试卷真题(含答案详解) (2).pdf VIP
- 2025届江苏省南菁高级中学物理高一第一学期期中达标检测模拟试题含解析.doc
文档评论(0)