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

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

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


相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能5 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study6 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境6 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1236 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb007 小时前
一个项目带你入门AI应用开发01
python
0566468 小时前
Python康复训练——常用标准库
开发语言·python·学习