Python:整数与列表的"链式定义"

Lea*_*ess 8 python

我刚刚在Python中定义了变量.即:

a = b = 0
a = 1
Run Code Online (Sandbox Code Playgroud)

给我a=1和/ b=0或a和b是两个独立的变量.

但:

a = b = []
a.append(0)
Run Code Online (Sandbox Code Playgroud)

给我a = [0]b = [0],或者a和b是对同一个对象的两个引用.这对我来说很困惑,这两种情况有何不同?是因为int是原始类型还是因为列表只是指针?

Mar*_*ers 13

a始终b指向同一个对象.但是你不能改变整数,它是不可变的.

在你的第一个例子中,你反弹 a指向另一个对象.你没有在另一个例子中这样做,你从未分配过另一个对象a.

相反,您要求对象a 引用更改自身,以向该对象添加另一个条目.对同一个对象(the list)的所有其他引用都将看到这些更改.这是因为list对象是可变的.

正确的比较是重新分配a以指向新的列表对象:

a = b = []
a = [0]
Run Code Online (Sandbox Code Playgroud)

现在你反弹ab仍在引用第一个列表对象.