资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Python字符串Intern机制是什么

这篇文章主要介绍“Python字符串Intern机制是什么”,在日常操作中,相信很多人在Python字符串Intern机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字符串Intern机制是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站设计、同德网络推广、微信小程序开发、同德网络营销、同德企业策划、同德品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供同德建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

字符串在 Python 中是最简单也是最常用的数据类型之一,在 CPython 中字符串的实现过程中使用了一种叫做 Intern(字符串驻留)的技术来提高字符串效率。那么究竟什么是 intern 机制,这种机制又是如何提高字符串效率的呢?

先来看一段代码:

>>> s3 = "hello!"
>>> s4 = "hello!"
>>> s3 is s4
False
>>> id(s3)
80325968L
>>> id(s4)
80326048L


s3 和 s4 虽然值是一样的,但确确实实是两个不同的字符串对象,Python 会为它们俩各自分配一段内存空间,假设程序中存在大量值相同的字符串,系统就不得不为每个字符串重复地分配内存空间,显然,对系统来说是一种资源浪费。为了解决这种问题,Python 针对字符串引入了 intern 机制。

Python字符串Intern机制是什么

再来看:

>>> s3 = intern('hello!')
>>> s4 = intern('hello!')
>>> s3 is s4
True
>>> id(s3)
80325968L
>>> id(s4)
80325968L


intern
 是 Python 中的一个内建函数,该函数的作用就是对字符串进行 intern 机制处理,处理后返回字符串对象。我们发现但凡是值相同的字符串经过 intern 机制处理之后,返回的都是同一个字符串对象,这种方式在处理大数据的时候无疑能节省更多的内存空间,系统无需为相同的字符串重复分配内存,对于值相同的字符串共用一个对象即可。

Python字符串Intern机制是什么  
 其实,实现 Intern 机制的方式非常简单,就是通过维护一个字符串储蓄池,这个池子是一个字典结构,如果字符串已经存在于池子中就不再去创建新的字符串,直接返回之前创建好的字符串对象,如果还没加入到该池子中,则先构造一个字符串对象,并把这个对象加入到池子中去,方便下一次获取,用伪代码就可以描述为:
intern_pool = {}
def intern(s):    if s in intern_pool:        
        return intern_pool[s]    
   else:        obj = PyStringObject(s)        intern_pool[s] = obj        
       return obj


在主流面向对象的编程语言中,字符串的  intern 机制对于高效处理字符串已经成为一种标配,通过 intern 机制可以提高字符串的处理效率,当然,解释器内部很对 intern 机制的使用策略是有考究的,有些场景会自动使用 intern ,有些地方需要通过手动方式才能启动。比如:

>>> s1 = "hello"
>>> s2 = "hello"
>>> s1 is s2
True
>>> id(s1)
72320704L
>>> id(s2)
72320704L

这段代码就是 Python 自动使用了intern机制的结果。

到此,关于“Python字符串Intern机制是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


本文名称:Python字符串Intern机制是什么
文章出自:http://cdkjz.cn/article/iegjep.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220