GEEK
← 返回首页

什么是字符串(String)以及字符串不可变性(Immutability)?

#随笔

字符串(str)是 Python 中用于表示文本的数据类型,由单引号、双引号或三引号包围。字符串支持判断内容、获取长度、按索引访问字符等操作,但不能直接修改其中的字符,这就是字符串的不可变性(Immutability)。如果需要修改字符串,只能创建一个新的字符串,而不能改变原来的字符串对象。

什么是字符串(String)以及字符串不可变性(Immutability)?

在 Python 中,字符串(String,简称 str 是最常用的数据类型之一。

无论是:

  • 用户姓名
  • 一段文字
  • 邮箱地址
  • 文件路径
  • 网页链接

本质上都可以使用字符串来表示。

本节将学习:

  • 什么是字符串
  • 如何创建字符串
  • 如何处理多行文本
  • 如何在字符串中使用引号
  • 如何判断字符串是否包含某些字符
  • 如何获取字符串长度
  • 什么是字符串索引
  • 什么是字符串不可变性

什么是字符串(String)?

字符串就是:

由一个或多个字符组成,并使用引号包围的一段文本。

例如:

"Hello"
"Python"
"你好,世界"
"123"

它们都是字符串。

注意:

即使 "123" 看起来像数字,

由于它被引号包围,所以它仍然是字符串,而不是整数。


如何创建字符串?

Python 支持两种最常见的字符串写法。

使用单引号:

my_str_1 = 'Hello'

使用双引号:

my_str_2 = "World"

两种写法完全等价。

例如:

print('Python')

和:

print("Python")

输出都是:

Python

建议: 在同一个项目中保持统一的引号风格,可以让代码更整洁。


多行字符串

如果字符串内容有很多行,

可以使用三引号(Triple Quotes)

三重双引号:

my_str = """第一行
第二行
第三行"""

或者三重单引号:

my_str = '''第一行
第二行
第三行'''

输出时会保留换行。

例如:

第一行
第二行
第三行

这种写法常用于:

  • 长文本
  • SQL 语句
  • HTML 模板
  • 程序说明

字符串中包含引号怎么办?

有时候,

字符串本身就包含引号。

例如:

It's a sunny day

这里:

It's

里面已经有一个单引号。

Python 提供了两种解决方案。


方法一:使用另一种引号包围字符串(推荐)

如果字符串里面有单引号,

就使用双引号包围:

msg = "It's a sunny day"

如果字符串里面有双引号,

就使用单引号包围:

quote = 'She said, "Hello World!"'

这是最简单、最推荐的方法。


方法二:使用转义字符(Escape Character)

如果必须使用同一种引号,

可以在引号前添加反斜杠 \

例如:

msg = 'It\'s a sunny day'

或者:

quote = "She said, \"Hello!\""

这里:

\

叫做:

转义字符(Escape Character)

它告诉 Python:

后面的引号只是普通字符,不表示字符串结束。


判断字符串是否包含某些内容

Python 提供了:

in

运算符。

作用是:

判断一个字符串是否包含指定字符或子字符串。

返回结果:

  • True
  • False

例如:

my_str = "Hello world"

print("Hello" in my_str)

输出:

True

因为:

Hello

确实存在。

再例如:

print("Python" in my_str)

输出:

False

因为:

Python

并不存在。

也可以判断单个字符:

print("e" in my_str)

输出:

True

获取字符串长度

有时候,

我们需要知道字符串有多少个字符。

Python 提供:

len()

函数。

例如:

my_str = "Hello world"

print(len(my_str))

输出:

11

这里:

空格也算一个字符。

因此:

Hello world

一共有:

11 个字符

字符串索引(Index)

字符串中的每一个字符,

都有自己的位置编号。

这个编号叫做:

索引(Index)

Python 使用:

从 0 开始编号。

例如:

Hello world

对应索引如下:

字符 H e l l o 空格 w o r l d
索引 0 1 2 3 4 5 6 7 8 9 10

获取指定字符:

my_str = "Hello world"

print(my_str[0])

输出:

H

获取:

print(my_str[6])

输出:

w

访问字符时使用:

字符串[索引]

负索引

除了正索引,

Python 还支持:

负索引(Negative Index)

负索引表示:

从字符串末尾开始数。

例如:

字符 H e l l o 空格 w o r l d
负索引 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

例如:

print(my_str[-1])

输出:

d

再例如:

print(my_str[-2])

输出:

l

使用负索引时,

无需提前知道字符串长度,非常方便。


什么是不可变性(Immutability)?

这是 Python 字符串最重要的特性之一。

不可变(Immutable) 的意思是:

对象创建以后,里面的内容不能直接修改。

字符串就是不可变对象。

例如:

greeting = "hi"

之后:

greeting = "hello"

这是允许的。

因为:

这里并不是修改原来的字符串,

而是让变量:

greeting

重新指向了一个新的字符串对象。

最终输出:

print(greeting)

结果:

hello

为什么不能修改字符串?

假设:

greeting = "hi"

很多初学者会尝试:

greeting[0] = "H"

希望得到:

Hi

但是程序会报错:

TypeError:
'str' object does not support item assignment

原因就是:

字符串中的字符不能被直接替换。

也就是说:

"hi"

一旦创建,

里面的:

h

和:

i

就不能直接修改。

如果需要新的内容,

必须重新创建一个新的字符串。


可变对象和不可变对象

Python 中的数据类型可以简单分为两类。

类型 是否可以修改 示例
不可变(Immutable) ❌ 不可以 strintfloatbooltuplerange
可变(Mutable) ✅ 可以 listdictset

例如:

列表可以修改:

numbers = [1, 2, 3]

numbers[0] = 100

这是允许的。

但是:

text = "Hello"

text[0] = "h"

这是不允许的。


学习小结

知识点 说明
字符串(str 用于表示文本,由单引号、双引号或三引号包围。
三引号 用于创建多行字符串。
引号处理 可以使用不同类型的引号包围字符串,或使用 \ 进行转义。
in 运算符 判断字符串是否包含指定字符或子字符串,返回 TrueFalse
len() 获取字符串长度(字符数量)。
索引(Index) 使用 字符串[索引] 获取指定位置的字符,索引从 0 开始,也支持负索引。
不可变性(Immutability) 字符串创建后不能直接修改字符,只能重新创建新的字符串对象。

总结

  • 字符串(str)是 Python 中表示文本的数据类型,可以使用单引号、双引号或三引号创建。
  • 可以使用 in 判断字符串是否包含指定内容,使用 len() 获取字符串长度,使用索引访问指定位置的字符。
  • Python 的字符串支持正索引和负索引,方便从前或从后访问字符。
  • 字符串属于不可变对象(Immutable),创建后不能直接修改其中的字符;如果需要改变内容,应创建一个新的字符串并重新赋值给变量。
  • 理解字符串及其不可变性,是后续学习字符串方法、切片(Slice)和文本处理的重要基础。