在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,就像将变量分配给列表一样?
答案 0 :(得分:3)
在您的第一个示例中,a
和b
都是对同一对象的引用,即列表。当您更改列表时,a
和b
(仍然指向相同列表)的输出也是如此。
在第二个示例中,您将 new 整数对象分配给名称a
。 a
和b
是两个不同的对象,现在具有不同的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
并未随之更改。