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. 给文章提建议

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

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


相关推荐
我的xiaodoujiao21 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 38--Allure 测试报告
python·学习·测试工具·pytest
沈浩(种子思维作者)7 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
io_T_T7 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
华研前沿标杆游学8 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然8 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
AI小怪兽8 小时前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
Eric.Lee20219 小时前
python实现 mp4转gif文件
开发语言·python·手势识别·手势交互·手势建模·xr混合现实
EntyIU9 小时前
python开发中虚拟环境配置
开发语言·python