>>> 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中都有对应的引用