列表为什么有时候又是不可变变量

a=[1]
print(id(a)
print(id(a.append(2)))
这两个得出的地址会不一样

你第二个输出是有问题的,append()方法没有返回值,是None

img

你在问题中说,list 变成了【不可变】变量,

然后在描述中,又提示了是地址变化,没有对问题进行详细说明,所以本身你的问题就有点疑惑。


在这里,我们直接按你的代码来分析:

    a = [1]    #1
    print(id(a))  #2
    print(id(a.append(2)))  #3 

你这么处理,打印出来的内容肯定不一样,为什么?

因为这里涉及到一个执行顺序的问题,常规来说,程序代码是从左到右的顺序执行,

而你的代码片段中#3部分,优先执行的是【id()】,他是把【a.append(2)】当做一个参数,也就是说,id的参数变成了新的变量;
他等同于下面这样:

    a = [1]
    print(id(a))
    b = a.append(2)
    print(id(b))

这就说明了,为何你的两次输出不一样的原因。

其次,你要输出一样,只要确保两次的变量是同一个即可,比如这样:

    a = [1]
    print(id(a))
    a.append(2)
    print(id(a))

以上,就是我的见解,如还有疑问,欢迎来讨论。