首先了解Python中对象包含的三个基本要素,分别是:
id(身份标识)、
python type()(数据类型)、
value(值)。
测试1:
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>> id(x)
2309346458568
>>> id(y)
2309346458568
>>> id(z)
2309346396424
猜测:
=:用来比较两个对象是否相等,value作为判断因素;
is:比较判断两个对象是否相同,id作为判断因素。
测试2:
1.数值
>>> a = 1
>>> b = 1
>>> a is b
True
>>> id(a)
1774021664
>>> id(b)
1774021664
2.字符串
>>> a = 'aaa'
>>> b = 'aaa'
>>> a is b
True
>>> id(a)
2050043672816
>>> id(b)
2050043672816
3.元组、列表、字典、集合
>>> a = (1, 2, 3)
>>> b = (1, 2, 3)
>>> a is b
False
>>> id(a)
2050043702728
>>> id(b)
2050043293488
>>>
>>>
>>> a = [1, 2]
>>> b = [1, 2]
>>> a is b
False
>>> id(a)
2050043666952
>>> id(b)
2050043743368
>>>
>>>>
>>> a = {'cheese':1,'zh':2}
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
2050043209696
>>> id(b)
2050043722056
>>>
>>>
>>> a = set([1,2,3])
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
2050043199048
>>> id(b)
2050043454856
猜测:
只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False。
测试3:
>>> a = 600
>>> b = 600
>>> a is b
False
>>> a == b
True
>>> id(a)
2697979752752
>>> id(b)
2697979752720
>>>
>>>
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
查阅后发现:
Python有缓冲池机制,在整数对象缓冲池中,对于[-5,257]这样的小整数,系统已经初始化好,可以直接拿来用。而对于其他的大整数,系统则提前申请了一块内存空间,等需要的时候在这上面创建大整数对象。
当然,字符串、 列表和字典对象也有各自的‘缓冲池机制。有兴趣可参考大佬的文章:
注:本文相对原文有修改。
原文地址:https://www.cnblogs.com/CheeseZH/p/5260560.html