Python(七十六)字符串的驻留机制

news2024/12/23 13:20:50

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。
☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无论你是学生、职场人士还是对编程感兴趣的爱好者,都能从中受益。跟着我的学习笔记一起学习python吧。
🌙专栏目标:本专栏的目标是帮助我自己记忆、方便回顾所学知识以及帮助其他想学习python的小伙伴掌握Python编程语言的基本概念和技巧,并逐步提高我们的编程能力。通过这个专栏,我们将学会如何编写Python代码,理解各种数据类型、控制结构和函数,掌握常用的Python模块和库,以及应用Python解决实际问题。

⭐️ 专栏主要内容: 主要学习python的开发环境搭建;Python的基础知识,包括变量、数据类型、条件语句和循环等;python的数据结构和算法;python的函数和模块;python的文件处理等。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:从零开始的Python入门之路

在这里插入图片描述

文章目录

    • 1. 什么是字符串
    • 2. 什么是字符串的驻留机制
    • 3. 驻留机制的几种情况(交互模式)
      • 字符串的长度为0或1时
      • 复合标识符的字符串
      • 字符串只在编译时进行驻留,而非运行时
      • [-5,256]之间的整数数字
    • 4. 驻留机制的优缺点
      • 优点
      • 缺点

1. 什么是字符串

在Python中,字符串是一种表示文本数据的数据类型。它由一系列字符组成,可以包含字母、数字、符号等。字符串在Python中被广泛使用,用于存储和操作文本数据。

在Python中,我们可以使用单引号或双引号来创建字符串。例如:

str1 = 'Hello, World!'
str2 = "Python is awesome!"

2. 什么是字符串的驻留机制

字符串的驻留机制是Python解释器在内存中对字符串进行优化的一种机制。为了节省内存和提高性能,Python解释器会对一些字符串进行驻留(interning),即将相同的字符串对象共享在内存中,以便多个变量引用同一个对象。

驻留机制只适用于字符串对象,对于其他类型的对象,如整数、浮点数等,不适用驻留机制。

3. 驻留机制的几种情况(交互模式)

字符串的长度为0或1时

当字符串的长度为0或1时,Python会对其进行驻留。这是因为长度为0或1的字符串在程序中非常常见,通过驻留机制可以减少内存的使用。

示例代码:

str1 = ''
str2 = 'a'

# 使用is操作符判断两个字符串是否引用同一个对象
print(str1 is '')  # True
print(str2 is 'a')  # True

运行结果:

True
True

复合标识符的字符串

复合标识符的字符串是指由字母、数字和下划线组成的字符串,用于表示变量名、函数名等标识符。Python会对长度不超过255的复合标识符的字符串进行驻留。

示例代码:

str1 = 'my_variable'
str2 = 'my_function'

# 使用is操作符判断两个字符串是否引用同一个对象
print(str1 is 'my_variable')  # True
print(str2 is 'my_function')  # True

运行结果:

True
True

字符串只在编译时进行驻留,而非运行时

在Python中,字符串只在编译时进行驻留,而非运行时。这意味着在交互模式下,每次输入相同的字符串时,都会创建新的字符串对象。

示例代码:

str1 = input('Enter a string: ')
str2 = input('Enter a string again: ')

# 使用is操作符判断两个字符串是否引用同一个对象
print(str1 is str2)

运行结果:

Enter a string: Hello
Enter a string again: Hello
False

[-5,256]之间的整数数字

Python解释器在启动时会预先创建一些常用的整数对象,范围在-5到256之间。这意味着当我们使用这个范围内的整数时,它们会被驻留,以便多个变量引用同一个对象。

示例代码:

num1 = 10
num2 = 10

# 使用is操作符判断两个整数是否引用同一个对象
print(num1 is num2)  # True

num3 = 1000
num4 = 1000

# 使用is操作符判断两个整数是否引用同一个对象
print(num3 is num4)  # False

运行结果:

True
False

4. 驻留机制的优缺点

优点

  • 节省内存:通过驻留机制,相同的字符串对象可以共享在内存中,减少了重复对象的创建,节省了内存空间。
  • 提高性能:由于字符串的比较操作比较频繁,通过驻留机制可以加快比较速度,提高程序的性能。

缺点

  • 内存占用:驻留机制会占用一定的内存空间来存储驻留的字符串对象,如果程序中存在大量不同的字符串,可能会占用较多的内存。
  • 可变字符串不驻留:对于可变字符串(如使用+=操作符拼接字符串),驻留机制不适用,每次操作都会创建新的字符串对象。

参考链接:

  • Python官方文档 - String Interning
  • Python字符串的驻留机制
  • Python字符串的驻留机制

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

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

相关文章

C++:类与对象补充 - 初始化列表、static成员、友元、匿名对象

目录 引言 一、 初始化列表 1.1 构造函数内部赋值 1.2 使用初始化列表 1.3 注意事项 1.4 explicit关键字 二、 static成员 2.1 概念 2.2 情景 2.3 特性 三、 友元 3.1 概念 3.2 语法 3.2.1 友元函数 3.2.2 友元类 3.3 特性 四、匿名对象 4.1 概念 4.2 语法 …

Soundpad解决自动键失效的问题

这里给出解决方法,具体原因我也不太懂,因为我也是做实验得出某些操作可能会导致自动键不起作用。 首先打开首选项,配置如下图所示,这里只改了特殊热键的五个键位和自动键 我之前犯的错误,我相信大部分跟我一样&#…

74、75、76——tomcat项目实战

tomcat项目实战 tomcat 依赖 java运行环境,必须要有jre , 选择 jdk1.8 JvmPertest 千万不能用 kyj易捷支付 项目机器 选择 一台机器 ,安装jdk1.8的机器下载tomcat的包 上传到机器,解压tomcattomcat文件 bin文件夹: 启动文件 堆栈配置文件 catalina.sh JAVA_OPTS="-Xm…

vue3+ts使用antv/x6

使用 2.x 版本 x6.antv 新官网: 安装 npm install antv/x6 //"antv/x6": "^2.1.6",项目结构 1、初始化画布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…

DTW(Dynamic Time Warping)动态时间规整

转载于知乎DTW(Dynamic Time Warping)动态时间规整 - 知乎 DTW可以计算两个时间序列的相似度&#xff0c;尤其适用于不同长度、不同节奏的时间序列&#xff08;比如不同的人读同一个词的音频序列&#xff09;。DTW将自动warping扭曲 时间序列&#xff08;即在时间轴上进行局部的…

关于大功率H桥电机驱动模块

关于大功率H桥电机驱动模块 简介接线说明模块接线说明PWM调速控制说明 材料准备实际接线图测试视频总结 简介 大功率H桥电机驱动模块是由两个半桥驱动IC外加4个外部NMOS管组成&#xff0c;发热量小&#xff0c;刹车效果好。 两路PWM输入&#xff0c;占空比可在0-99%内调节。工…

2023/08/10

文章目录 一、计算属性传参二、小程序、h5跳转其他平台授权三、封装popup弹窗四、实现保存海报五、下载图片和复制分享链接 一、计算属性传参 计算属性的值往往通过一个回调函数返回&#xff0c;但是这个回调函数是无法传递参数的&#xff0c;要想实现计算属性传参可以通过闭包…

Python爬虫(十)_正则表达式

什么是正则表达式 正则表达式&#xff0c;又称规则表达式&#xff0c;通常被用来检索、替换那些符合某个模式&#xff08;规则&#xff09;的文本。 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成…

Prometheus技术文档-基本使用-配置文件全解!!!!!

简介&#xff1a; Prometheus是一个开源的系统监控和告警系统&#xff0c;由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据&#xff0c;比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中&#xff0c;…

eNSP:双向重定向和路由策略练习

实验要求&#xff1a; 拓扑图&#xff1a; IP、路由器 r1: <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 14.1.1.1 24 [r1-GigabitEthernet0/0/1]…

Linux下安装nginx (tar解压版安装)

Linux下安装nginx (tar安装) 1、下载nginx 官方下载地址https://nginx.org/en/download.html 在这里插入图片描述 2.解压 解压‘nginx-1.16.1.tar.gz’到指定目录&#xff08;/usr/local/myWorkSpace&#xff09;并且重命名 命令&#xff1a; tar -xvf nginx-1.16.1.tar.gz …

畜牧虚拟仿真 | 鱼授精过程VR模拟演练系统

随着科技的发展&#xff0c;虚拟现实(VR)技术逐渐渗透到各个领域&#xff0c;为人们提供了更加真实、直观的体验。在动物养殖教育领域&#xff0c;鱼授精过程VR模拟演练系统正成为一种新的教学手段&#xff0c;它能够帮助人们更好地理解和掌握鱼授精的操作技巧&#xff0c;从而…

C# OpenCvSharp读取rtsp流录制mp4

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using Syste…

【雕爷学编程】Arduino动手做(12)---霍尔磁场传感器模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Linux: network: tools: tcpdump,抓取vlan包需要注意的事情;不然会出现LLC协议

https://bugzilla.redhat.com/show_bug.cgi?id498981#c4 https://serverfault.com/questions/544651/vlan-tags-not-shown-in-packet-capture-linux-via-tcpdump 如果不加-e参数&#xff0c;抓取不到 vlan信息&#xff0c;会导致wireshark解析出现问题。因为&#xff0c;抓到…

调整项目符号/项目编号与文本的距离

百度知道多年前的答案是调整标尺&#xff0c;我的PPT里没有标尺 调节悬挂缩进即可

STM32HAL库:简化STM32微控制器开发

简介&#xff1a;在微控制器开发领域&#xff0c;效率、易用性和兼容性至关重要。STMicroelectronics通过其STM32HAL库为这些问题提供了解决方案&#xff0c;该库是专门为STM32微控制器系列设计的软件开发库。本文旨在探索STM32HAL库的特性、优势和应用程序&#xff0c;并提供使…

【看表情包学Linux】初识文件描述符 | 虚拟文件系统 (VFS) 初探 | 系统传递标记位 | O_TRUNC | O_APPEND

爆笑教程《看表情包学Linux》&#x1f448; 猛戳订阅&#xff01;​​​​​ &#x1f4ad; 写在前面&#xff1a;通过上一章节的讲解&#xff0c;想必大家已对文件系统基本的接口有一个简单的了解&#xff0c;本章我们将继续深入讲解&#xff0c;继续学习系统传递标志位&…

跨境商城服务平台搭建与开发(金融服务+税务管理)

随着全球电子商务的快速发展&#xff0c;跨境贸易已经成为一种新的商业趋势。在这个背景下&#xff0c;搭建一个跨境商城服务平台&#xff0c;提供金融服务、税务管理等一系列服务&#xff0c;可以极大地促进跨境贸易的发展。本文将详细阐述跨境商城服务平台搭建与开发的步骤。…

在单元测试中使用Jest模拟VS Code extension API

对VS Code extension进行单元测试时通常会遇到一个问题&#xff0c;代码中所使用的VS Code编辑器的功能都依赖于vscode库&#xff0c;但是我们在单元测试中并没有添加对vscode库的依赖&#xff0c;所以导致运行单元测试时出错。由于vscode库是作为第三方依赖被引入到我们的VS C…