==和is
python 中的对象包含三要素:id、tpye、value
其中id用来唯一标示的对象,tpye标识对象的类型,value是对象的值
a=b,a==b
is 判断的是 a 对象是否就是 b对象 ,是通过id来判断;
== 判断的是 a 对象的值是否和 b 对象的值相等,是通过value来判断的。
===================分割线==============================
来看着例子:
总结:
is 是比较两个引用是否指向了同一个对象(引用比较)
== 是比较两个对象的值是否相等(值得比较)
拓展:
整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。
Python 对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,
所有位于这个范围内的整数使用的都是同一个对象.
来看个例子:
同理单个字母也是这样的。
python中有这样一个机制——intern(字符串驻留)机制,
让他只占用一个”HelloWorld”所占的内存空间。靠引用计数去维护何时释放。