python中的可变和不可变字符串

4 python string replace immutability mutability

我只是在python中经历可变和不可变的结构.在Python中写道"字符串是不可变的",即我们无法改变它们考虑代码:

str1='Rohit'
str1.replace('R','M')
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

'Mohit'
Run Code Online (Sandbox Code Playgroud)

现在,有人说是变量str1指向字符串'Rohit',在str1.replace()之后它指向'Mohit'考虑以下代码:

'Rohit'.replace('R','M')
Run Code Online (Sandbox Code Playgroud)

这也给了我输出:

'Mohit'
Run Code Online (Sandbox Code Playgroud)

那么'字符串是不可变的'是什么意思?

tim*_*geb 10

字符串上没有任何允许更改字符串值的方法.换句话说:字符串是不可变的.

当你调用str.replace一个新的字符串时,构建并返回.

>>> s1 = 'Rohit'
>>> s2 = s1.replace('R', 'M')
>>> 
>>> s1
'Rohit'
>>> s2
'Mohit'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,s1仍然有其原始价值.

  • >>>a='Rohit' >>> id(a) 52641584L >>> a=a.replace('R','M') >>> a 'Mohit' >>> id(a) 38710648L 这清除了混乱 (3认同)

小智 7

字符串在 Python(和其他语言)中被称为不可变,因为一旦创建了初始字符串,作用于它的函数/方法都不会直接更改它,它们只是返回新字符串。

所以,在你的例子中

str1='Rohit'
str1.replace('R','M')
Run Code Online (Sandbox Code Playgroud)

通话结束后.replace,您应该尝试str1在 REPL 中进行评估。您可能会惊讶地发现str1仍然保留值“Rohit”。返回.replace一个字符串,其中给定字符的所有实例都替换为指定字符。你的 REPL 将打印返回的字符串,但之后它会丢失,因为你没有将它分配给任何东西。

您的第二个示例大致相同,但使用字符串常量而不是像 之类的变量str1