达内致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销工程师、会计等职场人才。2015年起,推出面向青少年的少儿编程、智能机器人编程、编程数学等K12课程。

字符串驻留机制

另一个节省内存的方式就是将一些短小的字符串做成池,当程序要创建字符串对象前检查池中是否有满足的字符串。在内部中,仅包含下划线(_)、字母 和 数字 的长度不高过 20 的字符串才能驻留。驻留是在代码编译期间进行的,代码中的如下会进行驻留检查:

空字符串 '' 及所有;

变量名;

参数名;

字符串常量(代码中定义的所有字符串);

字典键;

属性名称;

驻留机制节省大量的重复字符串内存。在内部,字符串驻留池由一个全局的 dict 维护,该字段将字符串用作键:

void PyUnicode_InternInPlace(PyObject **p)

{

PyObject *s = *p;

PyObject *t;

if (s == NULL || !PyUnicode_Check(s))

return;

// 对PyUnicodeObjec进行类型和状态检查

if (!PyUnicode_CheckExact(s))

return;

if (PyUnicode_CHECK_INTERNED(s))

return;

// 创建intern机制的dict

if (interned == NULL) {

interned = PyDict_New();

if (interned == NULL) {

PyErr_Clear(); /* Don't leave an exception */

return;

}

}

// 对象是否存在于inter中

t = PyDict_SetDefault(interned, s, s);

// 存在, 调整引用计数

if (t != s) {

Py_INCREF(t);

Py_SETREF(*p, t);

return;

}

/* The two references in interned are not counted by refcnt.

The deallocator will take care of this */

Py_REFCNT(s) -= 2;

_PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;

}

变量 interned 就是全局存放字符串池的字典的变量名 interned = PyDict_New(),为了让 intern 机制中的字符串不被回收,设置字典时 PyDict_SetDefault(interned, s, s); 将字符串作为键同时也作为值进行设置,这样对于字符串对象的引用计数就会进行两次 +1 操作,这样存于字典中的对象在程序结束前永远不会为 0,这也是 y_REFCNT(s) -= 2; 将计数减 2 的原因。

从函数参数中可以看到其实字符串对象还是被创建了,内部其实始终会为字符串创建对象,但经过 inter 机制检查后,临时创建的字符串会因引用计数为 0 而被销毁,临时变量在内存中昙花一现然后迅速消失。

达内学python_徐州达内学习Python编程课程有哪些相关推荐

  1. 达内学python_通过在达内学习python我的职场之路更加宽广了

    人生如白驹过隙,一眨眼我已经在职场上混迹了3年了,每天都是一样的上班,摸鱼 下班,然后等待这周末的周天休息 ,这时候我可以睡个懒觉或者和朋友一起出去玩 ,工资不高不低,可以养活自己,但要是碰到自己喜欢 ...

  2. 大学哪些专业要学python_非计算机专业的大学生是否有必要学习Python编程

    首先,从当前社会的发展趋势来看,网络化.智能化是重要的发展方向,而且随着当前诸多行业企业纷纷开始进行智能化改造,所以对于当今的大学生来说,学习一定的人工智能知识是非常有必要的,而从计算机编程语言开始学 ...

  3. python编程教学基本语法教学视频_Python编程学习#Python视频课程#全民一起玩Python 基础+提高...

    适用人群 想用轻松系统的方式,从零开始真正理解掌握Python.进而学习办公.网抓.数据.AI.网站等技术的各界人士 课程概述 制作精细.自带吐槽,每节课程(20分钟)均耗时数十小时精心打造!有多达十 ...

  4. 学习Python编程开发可以从事的岗位有哪些?

    Python编程技术在人工智能领域的发展有目共睹,很多人都想学习Python技术,而且从事Python开发,所从事的工作机会和工作岗位及工作内容可选择的余地很多,未来发展空间也很大.下面我们就来详细的 ...

  5. 不是计算机专业学python能找到工作吗-非计算机行业为什么要转行学习Python编程...

    原标题:非计算机行业为什么要转行学习Python编程 现在的年轻人追求个性化选择,比如更为自由的工作时间???.更为多元化的精神激励.更为舒适的生活方式等等.由此互联网行业不仅满足这些条件还有这很好的 ...

  6. python编程做什么工作-学习Python编程后在成都可以做哪些工作?

    原标题:学习Python编程后在成都可以做哪些工作? Python被称为编程语言中的万能胶水,比如可以用来做爬虫,做网页,运维还有现在很火的人工智能Al都可以用上Python.一是Python有很多数 ...

  7. python编程需要什么软件-《》 学习python编程需要安装哪些软件?

    python安装教程有没有?最好是视频的 廖雪峰的python教程这里有教程,还是不错的. 学Python要安装哪些软件? 一. 安装python 1. 从python下载相应的python安装包,打 ...

  8. 如何自学python编程-如何教少儿学习Python编程

    如何给少儿讲编程? 1.首先给少儿讲编程一定要简单,通俗易懂. 因为少儿接触的事务比较少,你要用形象的少儿可以接受的方式让他们理解. 2.讲编程的速度一定要慢. 因为少儿的接受能力相对较弱一些,所以要 ...

  9. 学python编程_学习Python编程,我们应该如何学?学习内容包括哪些?

    点击蓝字"python教程"关注我们,一起学习成长哟! 我想可能很多网友和我有着相似的学习背景,学习Python会有以下的问题: 从零开始,不知道如何下手开始学? 被基本的数据结构 ...

最新文章

  1. F - Count the Colors - zoj 1610(区间覆盖)
  2. java中d怎样转换D,Java中的一些基本转换
  3. UVA 10405 - Longest Common Subsequence
  4. java播放声音和图片的代码_java怎么将出片处理成老照片?怎么播放声音?
  5. 如何向5岁小孩解释什么是支持向量机(SVM)?
  6. html不同平台,基于H5端自定义平台怎么使用和H5端不一样的index.html?
  7. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题
  8. hadoop伪分布式模式_Hadoop模式介绍-独立,伪分布式,分布式
  9. python优化算法_python – 优化算法
  10. php前台提交后台刷新,用js post数据后到后台,处理后如何实现前台页面刷新?...
  11. java csv下载_javacsv.jar
  12. 数据库课设——简单的图书管理系统
  13. 无线wifi服务器,无线串口服务器,wifi转串口,网口转wifi,无线串口通讯模块-上海卓岚...
  14. ffmpeg视频转码压缩
  15. 阿里巴巴有哪些好玩的分布式开源框架?
  16. 最最最最能测出你数通hcia基础扎不扎实的实验!速速行动!
  17. Unity Metaverse(四)、接入环信IM SDK 实现用户登录注册
  18. win8.1 android sdk,Android sdk 秒退 win8解决思路
  19. 【mysql】设置mysql默认密码
  20. 上班时间写开源软件,结果被单位告被警察抓,这算什么?

热门文章

  1. java treeset 合并_Java中TreeSet合并重复数据
  2. CSS+JS实现侧边栏
  3. 社会化登录分享-微信SDK接入
  4. 国家电网计算机考试分值,2019国家电网考试考什么题型?分值多少?范围是什么?...
  5. EasyCVR平台云存储技术的应用场景解析
  6. 工业大数据丨“宝刀”在手,却也要驭刀有术
  7. 力扣刷题-专项突破-SQL入门
  8. python提示jsondecodeerror是什么意思_python读取json文件时,出现JSONDecodeError问题,原因是什么,怎么解决?...
  9. 神经网络迭代次数的一个近似关系
  10. OpenHarmony主干代码如何获取