在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?
发布于 2014-07-11 16:53:41
在第一个示例中,a和b都是对同一个对象(列表)的引用。当您更改列表时,a和b的输出(仍然指向相同的列表)也是如此。在第二个示例中,您要将一个新的整数对象分配给名称a。a和b现在是两个具有不同ids的不同对象。演示:
>>> 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发布于 2014-07-11 16:52:49
可以说,整数是不可变的,因此不能用切片来更改它们,这与列表不同:
>>> 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并没有随之改变。
https://stackoverflow.com/questions/24702761
复制相似问题