python中关于赋值的问题

就是在这段代码中

a = [1, 2, 3, 4, 5]

b = a

b[1] = 7

print(a)

test = '123'

test2 = test

test2 = '456'

print(test)

在b修改了下标为1的值以后,a的值要改变

但是为什么test2修改了值但是test的值不改变呢?

字符串不是引用类型,修改其中之一,不会改变其余,要用一个类把字符串包裹起来,不同的变量指向相同的对象,才可以

b = a 和 test2 = test 其实都是让后一个变量指向前者的数据的存放地址。
在运行b[1] = 7时,由于列表是可变数据类型,所以只是把原地址的列表里的第二个值换成了数字7,所以打印变量a时,是跟变量b一样的内容。
在运行test2 = '456'时,由于str是不可变数据类型,test2会指向另外一个地址,让里面存放'456',此时test与test2指向了两个不同的地址,所以打印出不一样的内容。
尝试运行下面这段代码,类似与列表的修改数据操作,在字符串上是不可行的。

a = '123'
b = a
b[2] = '5'

Traceback (most recent call last):
File "", line 1, in
b[2] = '5'
TypeError: 'str' object does not support item assignment
翻译:TypeError: 'str'对象不支持项分配