我只是在python中经历可变和不可变的结构。 有人写道"字符串是不变的"在Python中,即我们无法改变它们 考虑一下代码:
str1='Rohit'
str1.replace('R','M')
这给出了输出:
'Mohit'
现在,有人说是变量str1指向字符串' Rohit'并且在str1.replace()之后,它指向' Mohit' 请考虑以下代码:
'Rohit'.replace('R','M')
这也给了我输出:
'Mohit'
然后'字符串的意思是不可变的'?
答案 0 :(得分:10)
字符串上没有任何方法,允许更改字符串的值。换句话说:字符串是不可变的。
当您致电str.replace
时,会构建并返回新字符串。
>>> s1 = 'Rohit'
>>> s2 = s1.replace('R', 'M')
>>>
>>> s1
'Rohit'
>>> s2
'Mohit'
正如您所看到的,s1
仍有其原始值。
答案 1 :(得分:2)
字符串在Python(和其他语言)中称为Immutable,因为一旦创建了初始字符串,没有任何函数/方法直接更改它,它们只返回新的字符串。
所以,在你的例子中
str1='Rohit'
str1.replace('R','M')
在.replace
来电之后,您应该尝试在REPL中评估str1
。您可能会惊讶地发现str1
仍然保留了价值' Rohit'。 .replace
返回 new 字符串,其中给定字符的所有实例都替换为指定字符。您的REPL将打印返回的字符串,但之后它会丢失,因为您没有将其分配给任何内容。
你的第二个例子大致相同,但是使用字符串常量而不是像str1
这样的变量。
答案 2 :(得分:2)
您可以通过在更改之前和之后检查变量的ID来检查可变性
In [3]: s1 = 'Rohit'
In [4]: id(s1)
Out[4]: 140510191375440
In [5]: s1.replace('R', 'M')
Out[5]: 'Mohit'
In [6]: id(s1)
Out[6]: 140510191375440
答案 3 :(得分:0)
你得到这样的输出是因为那行代码对字符串没有任何作用,但是创建了一个新的字符串,其中R替换为M(你可以认为它返回了一个变量),而在python中只需输入一个变量的名称它打印在控制台上。我认为这就是造成混乱的原因。
答案 4 :(得分:0)
是的,Python字符串肯定是不可变的。 假设您有
s = "Rohit"
现在 s 正确指向字符串对象“ Rohit”。 当你做类似的事情
s.replace("R", "M")
这不会改变 s 的位置。 .replace方法会将“ R”替换为“ M”,然后返回新创建的对象。在您的情况下,它将是Mohit。因此,您可以将“ Mohit”视为返回值,但它不会改变 s 。它创建一个新字符串并返回它。