【闪击Python】字符串的创建和驻留机制

news2024/12/24 3:04:33

  

  • 💌 博客内容:字符串的创建和驻留机制

  • 😀 作  者:陈大大陈

  • 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

  • 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

字符串的驻留机制

什么叫字符串驻留机制呢 

驻留机制的几种情况

字符串驻留的优缺点 

  • 字符串的驻留机制

字符串是Python中的基本数据类型,是不可变的字符序列。同样不可变的还有元组。 

  • 什么叫字符串驻留机制呢 

仅保留一份相同且不可变字符串序列的方法,python的驻留机制只对相同的字符串元素保留一次拷贝,之后再创建相同的字符串序列时,不再开辟新的空间,而是把这个字符串的地址赋给新的变量。

以下面的代码为例:

a='Python'
b="Python"
c='''Python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))

 

 三个相同字符串的地址是相同的,字符串发生驻留现象。

三个变量都储存同一个字符串Python的地址。

驻留机制的几种情况

  • 字符串长度为0或者1时
  • 符合标识符的字符串
  • 字符串只在编译的过程中驻留,而非运行时。
  • -5到256之间的整数数字

因为PyCharm 对字符串进行了优化处理,难以讲解上面的诸多情况。

所以下面就不使用PyCharm,而是用cmd的Python交互模式来讲解。

 输入python进入交互模式。

 当长度为0或者1时,字符串会发生驻留现象,地址相同。

合法的标识符是数字,字母和下划线。

当字符串不符合标识符时会发生什么呢?我们来试试。

如图,s1和s2的内容是相同的,但是地址却不相等。

 

 这是因为‘%’不是标识符,所以不发生字符串驻留。

接下来,如何理解第三条‘’字符串只在编译的过程中驻留,而非运行时’这句话呢?

 如图,s2是在编译时,也就是在运行之前就完成了字符串连接。

所以s1和s2发生了字符串驻留。

而s3是在运行时通过join来实现字符串的连接,所以没有发生字符串驻留。

打印三个字符串的地址,s1和s2相同,和s3不同。

再来看最后一个情况,-5到256之间的整数数字。

这个就很好理解,-6不在范围内,所以不驻留。

Python提供一个sys类,里面的intern方法可以强制两个字符串指向同一个对象。

你非得开两个空间,我觉得太浪费了,就只给你一个空间。

先导入。

再使用sys.intern() 

 如图,人工强制a和b指向同一片空间。

上面说了,PyCharm 对字符串进行了优化处理。

 

上面交互模式不发生字符串驻留的情况在这里发生了驻留。

字符串驻留的优缺点 

  • 当需要值相同的字符串时,可以直接从字符串池中取,不需要频繁的销毁和创建,可以提升效率和节约内存,而拼接字符串和修改字符串是影响性能的。
  • 所以,在进行字符串拼接操作时建议使用str类型的‘join’方法,因为join在运行时是先计算出所有字符串的长度,然后再拷贝,只new一次对象,效率比‘+’高。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dear Reality 发布全新 EXOVERB MICRO 混响插件

空间感混响效果新高度 Dear Reality 发布全新 EXOVERB MICRO 混响插件 Dear Reality 针对立体声制作推出最新的混响插件 EXOVERB MICRO,提供一流的真实感和空间感混响效果,将立体声混音技术提升至新高度。这个紧凑型音频插件功能非常强大,采…

得物社区亿级ES数据搜索性能调优实践

1.背景 2020年以来内容标注结果搜索就是社区中后台业务的核心高频使用场景之一,为了支撑复杂的后台搜索,我们将社区内容的关键信息额外存了一份到Elasticsearch中作为二级索引使用。随着标注业务的细分、迭代和时间的推移,这个索引的文档数和…

VisualStudio2022配置PCL点云库教程

属性管理器 首先,打开属性管理器:视图–其他窗口–属性管理器 打开后如图所示,选中Debug|x64,右键单击,选择属性 如图所示,需要修改的是VC目录中的包含目录和库目录: ** 包含目录 添加内容…

Andorid:日常学习笔记(3)——掌握日志工具的使用

使用Android的日志工具Log 方法: Android中的日志工具类为Log,这个类提供了如下方法来供我们打印日志: 使用方法: Log.d("MainActivity","onCreate execute"); 第一个参数tag:一般传入当前类名就好,主要用于队打印信息进行过滤.第二个参数:msg,具体想打…

如何成为一位测试开发工程师?测试开发的核心竞争力...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 抛出一个问题&…

【操作系统】第2章进程同步、PV操作、死锁

一、进程同步 1、 定义 (1) 临界资源:把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(摄像头、打印机)和许多变量、数据、内存缓冲区都属于临界资源。 对临界资源的访问必须互斥地进行。 ① 进入…

【软考】中级 | 数据库系统工程师 | 笔记总结

📢博客主页:肩匣与橘 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由肩匣与橘编写,首发于CSDN🙉 📢生活依旧是美好而又温柔的,你也…

解决winstore下载mincraft 出现错误提示的问题

mincraft 点开显示此应用无法在你的电脑上运行,去C:\XboxGames\Minecraft Launcher\Content下看了下: 但是别人电脑上相同目录下一样的文件能运行,于是选择重装,但是刚开始下载就遇到这个问题: 商店提示这个 点开一…

Ansys Zemax | 计算任意温度和压强下的折射率

概述 这篇文章介绍了OpticStudio如何计算材料在任意输入波长、环境温度和压强下的折射率。 介绍 通常情况下有两种参考折射率的测量方法:绝对测量和相对测量。其中绝对测量以真空为参考介质;相对测量则是以空气(摄氏温度20,一个标…

MySQL之盛放记录的大盒子 【InnoDB 数据页结构】

前言 本文章收录在MySQL性能优化原理实战专栏,点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》 学完了记录结构,我们该学数据页的结构,前边我们简单的提了一下页的概念&#xff…

臻图信息利用数字孪生构建生态环境智慧监测系统

2月27日,中共中央国务院印发《数字中国建设整体布局规划》中指出,要推动生态环境智慧治理,加快构建智慧高效的生态环境信息化体系,建设绿色智慧的数字生态文明。 生态环境监测是生态环境保护的基础,是生态文明建设的重…

企业什么时候需要ERP系统?

对于许多成长中的企业来说,是否需要ERP系统不是问题,而是何时需要的问题。随着企业的发展,其生成的数据量和要跟踪的数据源也在不断增加。在多个平台上管理所有这些信息变得成本昂贵、费时,而且容易出现管理不善的情况。 虽然对于…

性能测试入门实践路线图

我转行做软件测试工作已有六年多了, 从功能到自动化测试,然后负责性能测试团队和质量团队的技术专项治理,再到测试专家角色,负责整个技术项目的产品/运营和质量保障工作。 其中性能测试和线上稳定性保障,算是我最擅长…

物联网|IAR集成开发环境简介|cc254核心板硬件资源|物联网之蓝牙4.0 BLE基础-学习笔记(3)

文章目录 4、IAR集成开发环境简介5、 cc254核心板硬件资源 4、IAR集成开发环境简介 完整稳定的专业嵌入式开发环境,对不同的处理器有统一的用户界面,支持35种以上的MCU,包括8,16,32位, 完全兼容C语言的 高…

女孩子转数据分析难吗?难在哪里?

对于数据分析,很多人乍一听会觉得没啥技术难度,是个适合女孩子的专业。我们面对很多零基础小白也是用通俗的语言来形容这个专业:一般是通过Excel或者power BI工具对数据进行分析,制作成可视化的报表给领导层,为公司业务…

VS2022编译libiconv-1.17

需求概述 获得最新版本的windows下可用的libiconv静态库。 解决方案 概述 使用VS2022编译libiconv-1.17。需要对源码手动进行配置。 本文所述的方法同样适用于动态库,并且理论上适用于VS2010~2022所有版本。 如果你不在乎libiconv的版本,可以参考 …

DevOps死了吗?平台工程能否取代DevOps?

最近, Scott Carey 发表了一篇调查文章,喊出了一些开发者的心声:“扯淡的DevOps,我们开发者根本不想做运维!”除此之外,软件工程师兼DevOps评论员Sid Palas也在推特上写道,“DevOps已死&#xf…

C++知识点 -- 特殊类设计

C知识点 – 特殊类设计 文章目录 C知识点 -- 特殊类设计一、不能被拷贝的类二、 只能在堆上创建对象的类三、 只能在栈上创建对象的类四、 不能被继承的类五、 只能创建一个对象的类(单例模式)1.饿汉模式2.懒汉模式3. 单例对象释放问题: 一、…

【Python入门篇】——Python中判断语句(布尔类型,比较运算符,if语句)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Verilog 编程——奇偶分频(50%占空)

引言 最近准备一些笔试面试,想再把时钟奇偶分频的再整理一下。 我之前写过一个PWM产生的模块,里面有任意频率/占空比的时钟生成。可以参考: 基于FPGA的PWM发生器设计https://blog.csdn.net/qq_43045275/article/details/128365705?ops_re…