Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的字符串是可变的吗,如果不解释的话?_Python_String - Fatal编程技术网

python中的字符串是可变的吗,如果不解释的话?

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,然后尝试使用python中的replace方法将字符“h”改为“m”,并检查了类型(y):它显示的字符串 但当我在谷歌上搜索时,它显示的字符串是不可变的……请解释一下

>>> 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中的字符串是不可变的吗?”"? 你似乎在说它们在答案的其余部分是不变的,但你在反驳第一段。是的,对不起,现在修好了