首页 > python中关于字符串是不可变的理解

python中关于字符串是不可变的理解

python中字符串是不可变的,但下面的代码怎么理解?

a = 'joe'
a += ' is'
a

会输出 'joe is'

第二个问题:

x = 'a'
y = 'a'
x is y

输出True

x = [1,2]
y = [1,2]
x is y

输出False
why?


已经知道了,按照一楼朋友的方法试了一下,就明白了。感谢
当值是字符串时
x=y='a'和
x='a'
y='a'
都是2个指针指向同一块内存地址

当值是列表时
x=y=[1,2]
x、y的指针指向同一块内存地址
x = [1,2]
y = [1,2]
x、y分别指向不同的内存地址


执行完第一句,输出id(a),最后再执行id(a)看看,就明白了。


a = 'joe'
a += ' is'
a
a+="is"实际是新建立了一个变量a,变量的值是a(原来的joe)加上一个“is”
也就是第一句是一个赋值语句,第二句也是一个赋值语句,不过是后者覆盖了前者。
例如

a="1"
a="2"
a="3"
a

结果你猜到了。

你问的字符串不可变是什么意思,看下面的例子:

a="hello world"
a.upper()

结果 >>HELLO WORLD
a
结果 hello world

对string进行任何操作,如上面的任务,让他大写,他告诉我的大写是什么,但他自己岿然不动。

你要新的字符串就自己b=a.upper(),把结果富裕给另外的值,如果a不想要了,你也可以直接这么写:
a=hello world' a=a.upper()

a就是"HELLO WORLD"

这看起来像sting可变,但其实只是你覆盖了自己而已,不要跟string不可变概念搞混淆了。

以上部分同样适用于js。

此外,
>
a="hello'
b='hello'
id(a)
42926912
id(b)
42926912
```
虽然有两个变量,但内存里只有一个hello,a和b都指向同一个内存地址

【热门文章】
【热门文章】