python多重赋值理解

来源:互联网 发布:中文域名交易平台 编辑:程序博客网 时间:2024/05/17 02:05
>>> a='hello'>>> b='gaohang'>>> id(a)140680442415120>>> id(b)140680442415264

id() 是对象的内存地址,在python 中一切都是对象,名称只是对象的引用而已

那如果我们

>>> b,a=a,b

会发生什么样的情况呢?在 C++中,我们知道,这样是不被允许的,
但是在python 中,这样的赋值是可以被允许的,我是这么理解的。
其实相当于列表赋值

[b,a]=[a,b]

新建两个列表:

>>> list1=[a,b]>>> list2=[b,a]>>> id(list1)140680442367296>>> id(list2)140680442367440

继续看看列表里面每个元素的ID

>>> id(list1[0])140680442415120>>> id(list1[1])140680442415264>>> id(list2[0])140680442415264>>> id(list2[1])140680442415120

发现

id(list1[0])==id(list2[1])id(list1[1])==id(list2[0])

这说明列表的地址不一样,但列表里面的元素却有相同的地址,因为他们指向同一对象

然后

>>> list1[0]=list2[0]>>> list1['gaohang', 'gaohang']>>> id(list2[1])140680442415120

发现了吗?

id(list2[1])==id(a)

说明即使把list2中的b 赋给list1中 的a, list2中的a并不会变化。

原因就是每个列表有自己的命名空间,a,b 只是两个字符串对象的引用,这两个名字在各个名称空间都是独立存在,也就是说,‘gaohang’ 以及’scut’这两个字符串对象在两个列表list1和list2中都有对应的引用

0 0
原创粉丝点击