Python字符串的创建和驻留机制详解
目录
- 字符串
- 字符串驻留机制
- 字符串驻留机制优缺点
字符串
字符串在Python中是基本数据类型,是一个不可变的字符序列。
字符串驻留机制
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
驻留机制的几种情况(交互模式windows+r,cmd)
1、字符串的长度为0或1时
2、符合标识符的字符串
3、字符串只在编译时进行驻留,而非运行时
b在运行前连接abc,而c是在运行时连接,因此c没有驻留,开辟了新的空间
4、[-5, 256]之间的整数数字
sys中的intern方法强制两个字符串指向同一个对象
PyCharm对字符串进行了优化处理
a = 'abc%'
b = 'abc%'
print(a is b) # True
字符串驻留机制优缺点
当需要相同的字符串时,可以直接从字符串池里拿出来用,避免频繁的创建和销毁,提升效率并节约内存。因此拼接字符串和修改字符串是会比较影响性能的。
在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率比“+”高。
到此这篇关于Python字符串的创建和驻留机制详解的文章就介绍到这了,更多相关Python字符串驻留机制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Python中的 is 和 == 以及字符串驻留机制详解
is 和 == 先了解下官方文档中关于 is 和 == 的概念.is 表示的是对象标示符(object identity),而 == 表示的是相等(equality):is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样(相当于检查 id(a) == id(b)),而 == 是用来检查两个对象引用的值是否相等(相当于检查 a.eq(b)):这点和Java有点类似,只不过Java中是用 == 来比较两个对象在内存中的地址,用 equals() 来检查两者之间的值是否
-
python字符串驻留机制的使用范围知识点详解
1.字符串的长度为0和1时. 2.符合标识符的字符串. 3.字符串只在编译时进行驻留,而非运行时. 4.[-5,256]之间的整数数字. 实例 >>> str1='jiumo' >>> str2='jiumo' >>> str1 is str2 True >>> id(str1) 1979078421896 >>> id(str2) 1979078421896 知识点扩充: 驻留时机 所有长度为 0 和长度为 1 的
-
python 字符串的驻留机制及优缺点
说明 字符串驻留是一种仅保存一份相同且不可变字符串的方法.不同的值被存放在字符串驻留池中,发生驻留之后, 许多变量可能指向内存中的相同字符串对象, 从而节省内存. 原理 系统维护interned字典,记录已被驻留的字符串对象 当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,a的引用计数减1 若不存在,则记录a到interned中 驻留时机 所有长度为 0 和长度为 1 的字符串都被驻留 字符串只在编译时进行驻留,而非运行时 a = 'hi' # a变量被
-
Python字符串的创建和驻留机制详解
目录 字符串 字符串驻留机制 字符串驻留机制优缺点 字符串 字符串在Python中是基本数据类型,是一个不可变的字符序列. 字符串驻留机制 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量. 驻留机制的几种情况(交互模式windows+r,cmd) 1.字符串的长度为0或1时 2.符合标识符的字符串 3.字符串只在编译时进行驻留,而非运行时 b在运行
-
Python并发编程线程消息通信机制详解
目录 1 Event事件 2 Condition 3 Queue队列 4 总结一下 前面我已经向大家介绍了,如何使用创建线程,启动线程.相信大家都会有这样一个想法,线程无非就是创建一下,然后再start()下,实在是太简单了. 可是要知道,在真实的项目中,实际场景可要我们举的例子要复杂的多得多,不同线程的执行可能是有顺序的,或者说他们的执行是有条件的,是要受控制的.如果仅仅依靠前面学的那点浅薄的知识,是远远不够的. 那今天,我们就来探讨一下如何控制线程的触发执行. 要实现对多个线程进行控制,其实
-
python之sqlalchemy创建表的实例详解
python之sqlalchemy创建表的实例详解 通过sqlalchemy创建表需要三要素:引擎,基类,元素 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String 引擎:也就是实体数据库连接 engine = create_engine('mysql+pymysql://go
-
字符串内存驻留机制详解示例
复制代码 代码如下: //字符串的内存驻留机制 public static void Test() { //当有多个字符串变量包含了同样的字符串实际值时, //CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例. String s1 = "Hello"; String s2 = "Hello"; bool same = (obj
-
Python动态导入模块和反射机制详解
一.前言 何谓动态导入模块,就是说模块的导入可以根据我们的需求动态的去导入,不是像一般的在代码文件开头固定的导入所需的模块. 何谓反射机制,利用字符串的形式在模块或对象中操作(查找/获取/删除/添加)成员. 下面进入具体实例介绍环节.先创建一个示例文件example.py,简单写入几个加减乘除函数,如下,方便下文讲解使用. flag = 1 # 此变量在介绍反射机制时会用到 def my_sum(a, b): return a + b def my_sub(a, b): return a - b
-
python字符串反转的四种方法详解
这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Python程序设计' result = reduce(lambda x,y:y+x,book) print(result) 2.字符串切割 book = 'Python程序设计' print(book[::-1]) 3.用reversed方法,把字符串变成列表反转后拼接 result = reverse
-
python字符串拼接.join()和拆分.split()详解
目录 1. 字符串拆分函数.split() 2. 字符串拼接函数.join() 扩展:理解" ".join(s.split(" ")[::-1])[::-1] 总结 1. 字符串拆分函数.split() 按照空格拆分字符串: s = "fd as sf" res = s.split(" ") print(res) 返回值为:['fd','as','sf'] 备注: s.split(" ")常见于拆分一句话中
-
将Python字符串生成PDF的实例代码详解
笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF.比如,需要把Python字符串'这是测试文件'生成为PDF, 该PDF中含有文字'这是测试文件'. 经过一番检索,笔者决定采用wkhtmltopdf这个软件,它可以将HTML转化为PDF.wkhtmltopdf的访问网址为:https://wkhtmltopdf.org/downloads.html ,读者可根据自己的系统下载对应的文件并安装.安装好wkhtmltopdf,我们再安装这个软件的Python第三方模块
-
python字符串拼接+和join的区别详解
python在进行字符串的拼接时,一般有两种方法,一种是使用+直接相加,另一种是使用join a = "tests" b = "teststs" # 使用 + c = a + b # 使用join c = "".join(a,b) 这两种,其实在性能上具有比较大的差别,当然如果拼接的字符串的个数不多,就感受不到这种差别. 先谈谈这两种拼接方式各自的原理吧. 1. 使用 + 首先需要知道的是,在python中字符串属于不可变对象. 当用操作符+连接
随机推荐
- Go语言常用字符串处理方法实例汇总
- SQLite教程(十二):锁和并发控制详解
- SQL Server误区30日谈 第19天 Truncate表的操作不会被记录到日志
- 正确配置与维护Apache安全性设置方法
- Java编程中的vector类用法学习笔记
- javascript中的altKey 和 Event属性大全
- Android中使用Theme来解决启动app时出现的空白屏问题
- Android 动画之AlphaAnimation应用详解
- mysql 锁表锁行语句分享(MySQL事务处理)
- mysql存储过程 游标 循环使用介绍
- 在Ruby中创建和使用哈希的教程
- Sqlserver 2005使用XML一次更新多条记录的方法
- 全面解析C++中的new,operator new与placement new
- 微信小程序 网络API 上传、下载详解
- 浅谈带缓冲I/O 和不带缓冲I/O的区别与联系
- .NET/C#实现识别用户访问设备的方法
- Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
- PHP中执行MYSQL事务解决数据写入不完整等情况
- 基于Protobuf C++ serialize到char*的实现方法分析
- Element实现表格分页数据选择+全选所有完善批量操作