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

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

文章目录

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

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

python 复制代码
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:用户登录验证系统

python 复制代码
# 用户输入的验证码(来自表单)  
user_input = "AbC123"  

# 系统生成的验证码(存储在数据库)  
system_code = "AbC123"  

# 值相等判断(内容是否相同)  
if user_input == system_code:  
    print("验证码正确 ✅")  # 输出:验证码正确 ✅  
else:  
    print("验证码错误 ❌")  

# 同一性判断(是否同一个对象)  
if user_input is system_code:  
    print("指向内存中的同一对象")  
else:  
    print("不同内存对象")  # 输出:不同内存对象  

输出结果

bash 复制代码
验证码正确 ✅  
不同内存对象  

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

python 复制代码
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(新创建的对象)  

内存原理图示

bash 复制代码
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:检查单词中是否包含特定字母

python 复制代码
# 检查单词"apple"中是否包含特定字母
word = "apple"

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

输出结果

bash 复制代码
✅ 包含字母'a'
✅ 不包含字母'z'

2、答案:

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

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

  2. 核心规则说明

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

四、动手试一试

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

python 复制代码
# 创建两个相同内容的字符串  
str1 = "Python教程"  
str2 = "Python教程"  

# 验证是否为同一对象  
is_same_object = ______  # 使用is操作符  

print(f"是否为同一对象:{is_same_object}")  
print(f"str1内存地址:{id(str1)}")  
print(f"str2内存地址:{id(str2)}")  

参考答案:

python 复制代码
is_same_object = str1 is str2  # True(简单字符串会被驻留)

解析

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

任务2:敏感词检测系统

python 复制代码
# 用户评论内容  
comment = "这个产品非常好用!"  

# 检测是否包含敏感词"垃圾"  
has_sensitive_word = ______  # 使用in操作符  

if not has_sensitive_word:   # 当不存在敏感词时
    print("✅ 评论通过审核")  
else:  
    print("❌ 检测到敏感词")  

参考答案:

python 复制代码
has_sensitive_word = "垃圾" in comment  # False

关键点

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

📢 互动区

👉 遇到问题?在评论区:

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

支持作者 :点赞 | 收藏 | 关注

你的三连是我更新的最大动力!


相关推荐
Ivanqhz3 分钟前
MLIR OpBuilder
开发语言·python·mlir
威联通安全存储1 小时前
TS-h2287XU-RP 在家电制造总装与质检数据场景的部署
python·制造
泡泡鱼(敲代码中)2 小时前
Python 字符串 str 完整学习笔记
python·学习
troy1282 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
我不会起名字3223 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
ThornArmor4 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
毕业设计7034 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
kyrie_sakura4 小时前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
测试老哥4 小时前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
Zenova EdgeOS4 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python