首页 > 解决方案 > 如果 Python 中的字符串是不可变的,为什么我可以更改函数中的字符串?

问题描述

我是 Python 新手,我正在编写一个函数来更改字符串中所有字符的大小写。该函数本身称为 swapCases(),我在自己的函数中使用库函数 swapcase()。这是我用来测试我的功能的代码:

print(swapCases("HoLa"))

在第一种情况下,我的函数内容如下:

def swapCases(s):
    for i in range(len(s)):
        s[i] = s[i].swapcase()
    return s

当我运行此代码时,我从编译器收到一条消息:“str 对象不支持项分配。” 我用谷歌搜索了这条消息,它说 Python 中的字符串是不可变的,因此无法更改。但是,当我将功能更改为此:

def swapCases(s):
    s = s.swapcase()
    return s

该功能完全符合我的要求,并且测试打印出“hOlA”。如果字符串在 Python 中是不可变的,那么为什么会这样呢?不可变不意味着我不能改变它们吗?

标签: pythonstringimmutability

解决方案


通过将其分配给变量 s,您正在重新分配 s。这摆脱了对旧字符串“HoLa”的引用,并将其替换为对从 s.swapcases() 返回的字符串的引用

在您原来的情况下,您正试图按索引修改字符串索引。这样做会改变现有的引用,这是不允许的。这就是不可变的意思。


推荐阅读