进阶之python字符串驻留(intern)机制

字符串驻留机制

对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制。

驻留适用范围

由数字,字符和下划线(_)组成的python标识符以及整数[-5,256]。

实例1:

>>> str1='jiumo'

>>> str2='jiumo'

>>> str1 is str2

True

>>> id(str1)

1979078421896

>>> id(str2)

1979078421896

实例2:

>>> str3='jiumo wbw'

>>> str4='jiumo wbw'

>>> str3 is str4

False

>>> id(str3)

1979078402432

>>> id(str4)

1979078403832

可以看出非数字,字符和下划线(_)组成的字符串并不会触发驻留。python中用is可以比较两个字符串是否是同一个对象,也就是内存地址是否一样。

驻留时机

python中的驻留发生在compile_time,而不是run_time。

实例3:

>>> str1='jiu'+'mo'

>>> str1 is 'jiumo'

True

>>> str3='jiu'

>>> str4=str3+'mo'

>>> str4 is 'jiumo'

False

优缺点

字符串驻留机制的优缺点如下:

优点:能够提高一些字符串处理任务在时间和空间上的性能,

缺点:在创建或驻留字符串时的会花费更多的时间。

python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。为了节省内存,涉及到字符串的改动时通常用join()而非+。因为+会多次创建对象,而join()只创建一次对象。

驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

注意事项

1、连接字符串

由于字符串的改动不是inplace的操作,需要新建对象,因此不推荐使用+来拼接字符串,推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

2、字符串驻留限制

仅包含下划线(_)、字母和数字的字符串会启用字符串驻留机制驻留机制。因为解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由下划线、字母和数字组成。

python字符串驻留机制_python字符串驻留(intern)机制相关推荐

  1. python对象底层原理_Python字符串对象实现原理详解

    在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...

  2. python字符串正向递增_Python字符串基础知识

    Python字符串基础知识 1. 字符串的创建 1.1 单行字符串 单行字符串可以用一对单引号或一对双引号来创建,两者效果完全一样. 单引号创建:'我是单引号创建的字符串' 双引号创建:"我 ...

  3. python 字符串赋值操作_python字符串操作

    字符串 简介 字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变 这里的的改变,指的是声明变量后的真实对象.但如果第二次用到变量,赋值,系统会默认为你新生成一个变量.比如 ...

  4. python字符串拼接数字_python字符串和数值操作函数大全(非常全)

    字符串和数值型数字的操作大全 1.反斜杠\的使用规则:一般使用表示续行的操作,可以其他符号相结合组成其他的一些使用符号,转义字符\'的使用会识别引号,使得字符串中的引号和外面本来的啊引号相区分. (1 ...

  5. python 字符串切割例题_Python字符串及练习题

    1.变量名命名规则 # 中文是可以作为变量名的,但不建议姓名 = "hello"print(姓名)# 变量名可以由字母,数字或者下划线;# 变量名只能以字母或者下划线组成;# 变量 ...

  6. python字符串打印教学_python字符串格式化教你正确打印 : D

    python字符串格式化教你正确打印 : D python字符串格式化教你正确打印 : D 文章目录 用格式字符% 字符串 整数 浮点数 format格式化 print需要注意的地方 转义字符 %运算 ...

  7. python format函数实例_Python字符串格式化,format格式化函数详细使用

    Python接触比较多的是字符串,那么操作字符串也就多.Python 支持格式化字符串的输出 . 尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符的字符串中. 代码 ...

  8. python字符串截取拼接_Python字符串拼接、截取及替换方法总结分析

    本文实例讲述了Python字符串拼接.截取及替换方法.分享给大家供大家参考,具体如下: python字符串连接 python字符串连接有几种方法,我开始用的第一个方法效率是最低的,后来看了书以后就用了 ...

  9. python设置字符间距_python字符串处理以及字符串格式化

    一.python字符串处理 目录: 1.算长度(len),某个元素出现的次数(count) 2.切片   [ ],repr:把不可见字符显示出来 3.查找 #find,rfind从右边查找 4.字符串 ...

最新文章

  1. Showstopper [POJ3484] [二分] [思维]
  2. 强行分类提取特征自编码网络例3
  3. windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
  4. webclient 和 webrequest获取网页源码的
  5. 掌握python编程语言tensorflow_手把手教你eclipse集成Python语言+Tensorflow环境
  6. VTK:PolyData之TriangleColoredPoints
  7. 螺旋桨设计软件_我们又双叒叕获得一项国家软件著作权!
  8. selenium中js定位_Selenium中的定位剂
  9. 笔记︱虚拟变量回归=差异显著(方差分析)+差异量化(系数值)
  10. 局域网 访问计算机 软件,局域网共享软件
  11. pdf复制去掉换行符
  12. 美化复选框html,使用CSS3美化复选框checkbox
  13. virtualbox 清理磁盘占用空间
  14. 2020年12月-第02阶段-前端基础-CSS Day07
  15. 百度智能云首秀CES的主场感觉:用两个“中国第一”抛出AI新态势
  16. arm 2022.10.24
  17. 在线学习平台网站分享 (持续更新)
  18. 论文阅读——椭圆检测算法 2018 使用梯度分析利用错误检测控制的精确椭圆检测
  19. numeric_limits 解析
  20. 微信小程序如何发布小程序?

热门文章

  1. 非全日制毕业的研究生现在怎么样了?
  2. 明确工作职责的重要性
  3. delphi bpl插件系统开发
  4. 几种开源图形相关的库的总结
  5. 孙子兵法(Unicode有的所有字都已录入,还有它字疑为误传)
  6. 洋哥有哪些送给20多岁年轻人的建议?
  7. 计网 | 【三 数据链路层】知识点及例题
  8. 调侃计算机专业的句子,调侃生活的幽默句子
  9. android 虹软 例子,虹软免费人脸识别 Demo [Android]
  10. 《肥鸟笔记--基础数据结构》一、栈