首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量赋值给一个数字与Python中的数字列表之间的区别

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

Stack Overflow用户
提问于 2014-07-11 16:50:25
回答 2查看 168关注 0票数 1

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

代码语言:javascript
复制
>>>a=range(4)
>>>b=a
>>>a[2]=9
>>>b
[0,1,9,3]

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

代码语言:javascript
复制
>>>a=1
>>>b=a
>>>a=2
>>>b
1

为什么将变量赋值给列表的结果是b=1而不是b=2?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-11 16:53:41

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

代码语言:javascript
复制
>>> 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
票数 3
EN

Stack Overflow用户

发布于 2014-07-11 16:52:49

可以说,整数是不可变的,因此不能用切片来更改它们,这与列表不同:

代码语言:javascript
复制
>>> 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并没有随之改变。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24702761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档