python中的字符串是可变的吗,如果不解释的话?
我将字符串“y”声明为hello,然后尝试使用python中的replace方法将字符“h”改为“m”,并检查了类型(y):它显示的字符串 但当我在谷歌上搜索时,它显示的字符串是不可变的……请解释一下python中的字符串是可变的吗,如果不解释的话?,python,string,Python,String,我将字符串“y”声明为hello,然后尝试使用python中的replace方法将字符“h”改为“m”,并检查了类型(y):它显示的字符串 但当我在谷歌上搜索时,它显示的字符串是不可变的……请解释一下 >>> y="hello" >>> y=y.replace("h","m") >>> y 'mello' >>> type(y) <class 'str'> >>y=“你好” >>>y=y。替换(“h”
>>> y="hello"
>>> y=y.replace("h","m")
>>> y
'mello'
>>> type(y)
<class 'str'>
>>y=“你好”
>>>y=y。替换(“h”、“m”)
>>>y
“梅洛”
>>>类型(y)
您没有对字符串进行变异,而是更改了字符串y
指向的内容
y
最初指向“hello”
,然后运行行y=y.replace(“h”,“m”)
,并使y
指向字符串“mello”
。原始字符串“hello”
从未发生突变,因为字符串确实是不可变的。是的,字符串是不可变的。运行该行时
y=y。替换(“h”、“m”)
您正在创建一个新字符串,而不是更改第一个字符串。第一个字符串实际上无法更改。Python中的字符串是不可变的(不能更改以允许对所有字符串使用一个字典进行优化) 例如:
>>> y="hello"
>>> y.replace("h","m")
'mello'
>>> y
'hello'
当我们想要改变一个字符串时,我们可以使用BytError或(通常更好)-只需创建一个新的字符串。考虑例如方法“替换”。它没有改变示例中的字符串——但是我们可以指定它的返回值。
>>> y1 = y.replace("h","m")
>>> y1
'mello'
或者甚至使用相同的变量y,在这种情况下,它将创建一个新字符串并覆盖先前的y值
>>> y = y.replace('h','m')
>>> y
'mello'
这就像把一个新的价值放在一起:
>>> y = 'a new value'
>>> y
a new value
您没有对字符串进行变异。您用一个全新的字符串重新分配了一个变量。请尝试
x=y='hello'
,然后打印x
,您将看到它仍然具有值hello
。如果对列表执行相同操作(可变值)然后,您将看到x
中反映的任何更改,例如x=y=[0,1,2];y[0]=5;x
->[5,1,2]
@AChampion带有一个关于重复使用的内存locations@roganjosh我决定用不同于id()的方法来避免这种情况
@AChampion是的,我刚意识到你在我键入后进行了编辑,所以我的评论与你的新评论不相关,但我认为保留链接字符串可能是值得的。我不知道你在这里想说什么。你没有在可变/不可变方面对字符串进行变异,你总是在创建一个新字符串。在这篇文章中没有任何地方我们有一个字符串变异。在发布这样的内容时请小心。我们不需要比它们现在更混淆OP。等等,第一段应该说“Python中的字符串是不可变的吗?”"? 你似乎在说它们在答案的其余部分是不变的,但你在反驳第一段。是的,对不起,现在修好了