23、Python字符串核心机制解析:驻留原理、对象比较与成员检测实战

适合人群:零基础自学者 | 编程小白快速入门
阅读时长:约5分钟

文章目录

  • 一、问题:Python的字符串驻留机制?
    • 1、例子1:字符串驻留现象
    • 2、答案:
      • (1)字符串驻留
  • 二、问题:Python字符串比较和同一性?
    • 1、例子1:用户登录验证系统
    • 2、例子2:关键特性说明
    • 3、答案:
      • (1)同一操作符判断字符串相同
  • 三、问题:Python的成员操作符判断子字符串?
    • 1、例子1:检查单词中是否包含特定字母
    • 2、答案:
      • (1)成员操作符判断子字符串
  • 四、动手试一试
    • 任务1:验证字符串驻留机制
    • 任务2:敏感词检测系统

一、问题:Python的字符串驻留机制?

1、例子1:字符串驻留现象

str1 = "Python" # 简单字符串会被驻留
str2 = "Python"  print(id(str1))  # 输出内存地址(例如:140245378789616)  
print(id(str2))  # 输出相同的内存地址(例如:140245378789616)  
print(str1 is str2)  # True(证明是同一个对象)  

2、答案:

(1)字符串驻留

  1. 字符串驻留机制是Python的内存优化技术。当多个变量被赋予相同内容的字符串时,Python不会重复创建新对象,而是让这些变量共享同一块内存地址
  2. 简单说:常量字符串只保留一份。

二、问题:Python字符串比较和同一性?

1、例子1:用户登录验证系统

# 用户输入的验证码(来自表单)  
user_input = "AbC123"  # 系统生成的验证码(存储在数据库)  
system_code = "AbC123"  # 值相等判断(内容是否相同)  
if user_input == system_code:  print("验证码正确 ✅")  # 输出:验证码正确 ✅  
else:  print("验证码错误 ❌")  # 同一性判断(是否同一个对象)  
if user_input is system_code:  print("指向内存中的同一对象")  
else:  print("不同内存对象")  # 输出:不同内存对象  

输出结果

验证码正确 ✅  
不同内存对象  

2、例子2:关键特性说明

name1 = "Python"  
name2 = "Python"  
name3 = "Py" + "thon"  # 拼接创建新字符串  # 值相等检查  
print(name1 == name2)  # True(内容相同)  
print(name1 == name3)  # True(内容相同)  # 同一性检查(受驻留机制影响)  
print(name1 is name2)  # True(小字符串共享内存)  
print(name1 is name3)  # False(新创建的对象)  

内存原理图示

name1 → [P][y][t][h][o][n] ← name2(共享内存)  
name3 → [P][y][t][h][o][n](新建独立内存)  

3、答案:

(1)同一操作符判断字符串相同

  1. 可以直接使用==!=对字符串进行比较,是否值相同。

  2. 使用isnot is,判断2个对象是否相同,比较的是对象的地址,即id(obj1)是否和id(obj2)相等。

  3. 核心概念对比

操作符号检查内容生活类比
值相等==内容是否完全相同比较两本书内容是否相同
同一性is是否同一内存对象比较两本书是否同一本书

三、问题:Python的成员操作符判断子字符串?

1、例子1:检查单词中是否包含特定字母

# 检查单词"apple"中是否包含特定字母
word = "apple"# 检查是否包含字母"a"
if "a" in word:print("✅ 包含字母'a'")  # 会输出这行# 检查是否包含字母"z"
if "z" not in word:print("✅ 不包含字母'z'")  # 会输出这行

输出结果

✅ 包含字母'a'
✅ 不包含字母'z'

2、答案:

(1)成员操作符判断子字符串

  1. innot in关键字,判断某个字符(子字符串)是否存在于字符串中。

  2. 核心规则说明

操作符代码示例检查内容
in"Python" in "我爱Python"子串是否存在于字符串中
not in"Java" not in "Python教程"子串是否不存在于字符串中

四、动手试一试

任务1:验证字符串驻留机制

# 创建两个相同内容的字符串  
str1 = "Python教程"  
str2 = "Python教程"  # 验证是否为同一对象  
is_same_object = ______  # 使用is操作符  print(f"是否为同一对象:{is_same_object}")  
print(f"str1内存地址:{id(str1)}")  
print(f"str2内存地址:{id(str2)}")  

参考答案:

is_same_object = str1 is str2  # True(简单字符串会被驻留)

解析

  1. Python会对简单字符串自动启用驻留机制
  2. is操作符验证对象同一性

任务2:敏感词检测系统

# 用户评论内容  
comment = "这个产品非常好用!"  # 检测是否包含敏感词"垃圾"  
has_sensitive_word = ______  # 使用in操作符  if not has_sensitive_word:   # 当不存在敏感词时print("✅ 评论通过审核")  
else:  print("❌ 检测到敏感词")  

参考答案:

has_sensitive_word = "垃圾" in comment  # False

关键点

  1. 使用in判断子字符串是否存在
  2. 返回布尔值用于条件判断

📢 互动区
👉 遇到问题?在评论区:

  1. 描述问题(带代码截图更好)
  2. 分享学习心得
  3. 给文章提建议

支持作者:点赞 | 收藏 | 关注
你的三连是我更新的最大动力!


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

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

相关文章

pikachu靶场通关笔记22-2 SQL注入05-2-update注入(报错法)

目录 一、SQL注入 二、update注入 三、报错型注入 四、源码分析 1、代码审计 2、渗透思路 五、渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff…

【prometheus+Grafana篇】基于Prometheus+Grafana实现Redis数据库的监控与可视化

💫《博主主页》: 🔎 CSDN主页 🔎 IF Club社区主页 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了…

R语言速释制剂QBD解决方案之四

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》速释制剂混合和润滑工艺研究的R语言解决方案。 原料粒径分布与混合次数对混合均一性的影响 由于acetriptan 的溶解度低,acetriptan 需要粉碎以提高生物利用度。粉碎后的原料…

用python玩转大语言模型——从 RNN 到文本生成大语言模型的奇幻之旅

用python玩转大语言模型——从 RNN 到文本生成大语言模型的奇幻之旅 第一部分:RNN原理及其结构(魔法师的记忆水晶球) 1.1 经典RNN结构(时光旅行者的备忘录) 核心概念 时间循环:RNN通过隐藏状态h在时间步之间传递信息,形成闭环结构参数共享:每个时间步使用相同的权重…

数据结构(9)排序

一、常见排序算法 排序在生活中无处不在,上学这么多年班级排名啥的总有吧,不可能一次都没见过;打游戏有的排行榜不也是有排序的思想在里面,排序倒不是什么特殊的数据结构,但是是非常重要的算法思想,所以在初…

量子计算导论课程设计 之 PennyLane环境搭建

文章目录 具体配置conda 虚拟环境配置Pennylane 正所谓,磨刀不误砍柴工,想要进行量子计算导论的课程设计,首先就是搭建好平台,推荐大家就是本地搭建,那么下面有三种选择 QiskitTensorFlow QuantumPennylane 具体配置…

nginx ./nginx -s reload 不生效

问题 nginx ./nginx -s reload 不生效 解决 不是改opt/nginx下的配置文件是改/usr/local/nginx下的配置文件改之前做好备份

建造者模式深度解析与实战应用

作者简介 我是摘星,一名全栈开发者,专注 Java后端开发、AI工程化 与 云计算架构 领域,擅长Python技术栈。热衷于探索前沿技术,包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践,乐于分享实战经验与…

VScode - 我的常用插件01 - 主题插件Noctis

导言 Noctis 是一款为 Visual Studio Code 提供的主题插件,主打高对比度、护眼、美观。它有多种配色风格,适合不同的开发者审美和工作场景。 一、安装Noctis 二、设置颜色主题 三、测试主题 如上所示,有11种主题背景可以选择。这里&#xff…

【IQA技术专题】图像质量评价IQA技术和应用综述(万字长文!!)

专题介绍 图像质量评价(Image Quality Assessment, IQA)是图像处理、计算机视觉和多媒体通信等领域的关键技术之一。IQA不仅被用于学术研究,更在影像相关行业内实现了完整的商业化应用,涉及影视、智能手机、专业相机、安防监控、…

突然虚拟机磁盘只剩下几十K

第一步:查找哪些文件大于 100M find / -size 100M 第二步:删除掉无用的 log 发现,磁盘剩余空间并没有变大 假如一个文件正在被使用,你删除之后也是不会释放存储空间的。需要关闭相应的服务才能释放。

黑马教程强化day2-1

目录 一、Set集合1.Set集合特点2.Set集合分类3.hashSet底层原理:(基于哈希表存储数据的)代码演示 5.hashSet集合元素的去重操作(有些情况搞不动)代码演示 6.LinkedHashSet的底层原理(不常用,所以没有代码演…

【实习总结】C++ 通过pugi::xml库对xml文件进行操作

目录 相关背景 pugi::xml简概 将配置信息写入xml文件 读取xml文件中的配置信息 相关背景 当我们需要将某些配置信息写入项目目录下的xml文件,或者再程序启动时,加载项目下已有的的配置信息(.xml),此时,我…

Linux文件回收机制:安全删除文件不怕误删

Linux文件回收机制:安全删除文件不怕误删 文章目录 Linux文件回收机制:安全删除文件不怕误删一、Linux默认没有“回收站”?二、打造你自己的Linux回收站1. 建立回收站目录2. 创建软删除命令remove3. 定时清理回收站4. 替换rm命令5. 完整脚本 …

数据结构排序

目录 1、插入排序 2、希尔排序 3、堆排序 4、直接选择排序 5、快排 6、归并排序 补&#xff1a;计数排序 1、插入排序 void InsertSort(int* arr, int n) {int i 0;for (int i 0; i 1 < n; i){int end i;int tmp arr[end 1];while (end > 0){if (arr[end] &…

Spring声明式事务生效是有条件滴!

在日常工作中&#xff0c;经常使用Transactional 注解进行事务的声明&#xff0c;但如果发现事务未生效&#xff0c;可以从下面几个方面进行排查。 常见失效场景总结 场景原因解决方案内部方法调用绕过了Spring代理注入自身或使用AopContextprivate方法AOP无法增强改为public方…

Code Composer Studio快捷键

文本编辑 编辑、查找、替换功能快捷键 功能快捷键撤销CutZ重做CutY剪切CtrlX复制CtrlC粘贴CtrlV删除Delete全选CtrlA代码块选中AltShiftA查找、替换Ctrl F查找下一个匹配的字符串CtrlK查找上一个匹配的字符串CtrlShiftK查看接口注释&#xff08;文档&#xff09;F2查看函数帮…

从认识AI开始-----生成对抗网络(GAN):通过博弈机制,引导生成

前言 生成对抗网络&#xff08;GAN&#xff09;是lan J. Goodfellow团队在2014年提出的生成架构&#xff0c; 该架构自诞生起&#xff0c;就产生了很多的话题&#xff0c;更是被称为生成对抗网络是“新世纪以来机器学习领域内最有趣的想法”。如今&#xff0c;基于生成对抗网络…

限流算法java实现

参考教程&#xff1a;2小时吃透4种分布式限流算法 1.计数器限流 public class CounterLimiter {// 开始时间private static long startTime System.currentTimeMillis();// 时间间隔&#xff0c;单位为msprivate long interval 1000L;// 限制访问次数private int limitCount…

Maven 构建性能优化深度剖析:原理、策略与实践

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…