当前位置: 首页 > news >正文

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

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


相关文章:

  • 2024睿抗-03
  • Ubuntu 24.04 systemd-journald日志系统 journalctl 查看日志
  • JPA将大数据量的Excel文件导入到数据库中
  • 嵌入式开发学习日志(数据库II 网页制作)Day38
  • OPenCV CUDA模块立体匹配------对立体匹配生成的视差图进行双边滤波处理类cv::cuda::DisparityBilateralFilter
  • unicode减肥计划
  • Cohen–Grossberg神经网络
  • 提升集装箱及金属包装容器制造交付效率:数字化项目管理系统的核心优势
  • 中国北方GNSS业务站网积雪深度数据集(GSnow-CHINA v1.0, 12h/24h, 2013-2...
  • 【数据结构】 优先级队列 —— 堆
  • 【MySQL进阶】MySQL程序
  • TrOCR模型微调
  • LDStega论文阅读笔记
  • 阿里云可观测 2025 年 5 月产品动态
  • 【每日likou】704. 二分查找 27. 移除元素 977.有序数组的平方
  • docker-compose搭建eureka-server和zipkin
  • asio之静态互斥量
  • ubuntu22 arm 编译安装input leap
  • 20250611让NanoPi NEO core开发板在Ubuntu core16.04系统下开机自启动的时候拉高GPIOG8
  • NumPy 2.x 完全指南【二十五】记录数组
  • 网站开发的外文翻译/排名软件
  • 有没有交流做服装的网站/站长统计入口
  • 上饶网站网站建设/百度知道合伙人
  • 苏州网站推广建设/杭州百度seo
  • 保定网站建设兼职/抖音指数查询
  • 网站维护是什么工作/职业技能培训