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”
也就是第一句是一个赋值语句,第二句也是一个赋值语句,不过是后者覆盖了前者。
例如
结果你猜到了。
你问的字符串不可变是什么意思,看下面的例子:
结果 >>
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都指向同一个内存地址