关于python的可变类型和不可变类型有个问题?

a = [1,2]
b = a
id(a)
id(b)
b = [2,3]
id(a)
id(b)

为什么第一次两个id是相同的,指向了一块内存,可是修改了b后,却指向了不同的内存。 列表不是可变数据类型吗?

第一次a和b都指向了[1,2]这个列表对象,所以id一样,但是第二次b=[2,3]是一个新的赋值语句,它重新生成了一个列表对象,现在b指向的是[2,3]这个对象,所以id自然也变了,列表是可变数据类型的意思是你可以对这个列表对象本身进行改变,例如你执行b[0]=0,此时列表变成了[0,3],但是id(b)没有改变,因为改变的是列表这个对象,而不是b这个变量的引用。
温馨提示:答案为网友推荐,仅供参考