将变量赋值给数字与Python中的数字列表之间的区别

时间:2014-07-11 16:50:26

标签: python

在python中,如果按以下方式将数字列表分配给变量

>>>a=range(4)
>>>b=a
>>>a[2]=9
>>>b
[0,1,9,3]

但是当我以类似的方式分配单个变量时,我得到以下结果

>>>a=1
>>>b=a
>>>a=2
>>>b
1

为什么b = 1而不是b = 2,就像将变量分配给列表一样?

2 个答案:

答案 0 :(得分:3)

在您的第一个示例中,ab都是对同一对象的引用,即列表。当您更改列表时,ab(仍然指向相同列表)的输出也是如此。 在第二个示例中,您将 new 整数对象分配给名称aab是两个不同的对象,现在具有不同的ID。演示:

>>> a = range(4)
>>> b = a
>>> id(a)
38845472
>>> id(b)
38845472
>>> a=1
>>> b=a
>>> id(a)
33619048
>>> id(b)
33619048
>>> b=2
>>> id(a)
33619048
>>> id(b)
33619024

答案 1 :(得分:-2)

整数是不可变的可以这么说,你不能用切片来改变它们,不像列表:

>>> x = range(4)
>>> x
[0, 1, 2, 3]
>>> id(x)
4300734408
>>> x[0] = 5
>>> id(x)
4300734408
>>> x = 1
>>> id(x)
4299162584
>>> x+=1
>>> id(x)
4299162560
>>> 

如上所示,您可以更改列表,但它仍然具有相同的id。但是,如果您在整数上调用+=,则id会更改。

这正是为什么虽然您更改了a,但b并未随之更改。