a=2
b=3
这个时候,a==b和a is b 打印的都是True。因为a和b指向了同一个对象
a=[]
b=[]
而这个时候,a==b打印的是True,a和b的对象相同,但是a is b 打印的是False,因为没有指向同一个对象
a=[0]
b=a
a[0]=1
print b[0]
打印的为1,a==b和a is b 打印的都是True。
究其原因:
1 python里的不变类型:整型,字符串,元组;正好包含整型
2 python的列表为可变型
3python的赋值语句包含了三个含义:
例子:a=2:
首先在内存创建一个对象叫做2
然后创建一个对象叫做a,也就是大家认为的变量。
最后=意味着将一个引用从a指向2。
a=2语句运行完成。
然后大家又会问了:
a=2
b=2
这个会发生什么事情:
a=2解释过了
b=2也是这样的,只不过因为整型是不可变型,在内存中缓存了2,所以第一步省略了,直接将b指向了2
然后又会问了:
如果这个时候这样:
b=3
会怎么样:
b会指向对象3,a依然指向2
然后如果这个时候:
a=1
那么这个时候2的内部的引用计数器发现为0(内存中:一部分表明对象类型;一部分表明有几个引用指向了自己),那么就是没有对象指向它了,那么就会被垃圾回收\了。