python多重赋值理解

>>> 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值