Python '=='及'是'相关原理解析

  

'=='比较的是两个对象的值

  

'是'比较的是两个对象的内存地址(id)

  

下面我们着重理解‘是’。对于这个,我们需要知道:小整数对象池,大整数对象池,以及实习生机制

  

小整数池:Python预先创建小整数缓存池(5 ~ 256年),无论创建多少个对象,都是指向同一个地址,这样是为了避免小整数频繁申请和释放内存。

  
  ,

祝辞祝辞的在一个=3
  在在在b=3
  在在在a是b
  真正的
  在在在1 + 2等于3
  真正的

  ,

祝辞祝辞的在一个=1.0
  在在在b=1.0
  在在在a是b
  假
  

     

大整数对象池:Python提供了一个可扩展的内存空间,也叫通用整数对象池,谁需要用就给谁用,免去了申请内存。这个空间是一个PyIntBlock结构,是用一个单向列表连接一串内存(块),这个列表由block_list维护,而每个块维护一个整数对象数组(对象),用于存放被缓存的整数对象,即处于一个内存(块)的大整数是同一个对象。

  
  ,

祝辞祝辞的在def func ():
  …一个=10.1
  …b=10.1
  …返回一个是b
  …
  在在在func ()
  真正的
  

     

a和b的赋值都是由同一个通用整数池项获得的。

  

实习机制:Python的字符串类型中有一个实习,它是一个记录字符串对象的字典,以此来保证这些字符串在内存中的唯一,相同值的字符串会使用同一个对象。

  

但是,只对由字母,数字,下划线组成的字符串做实习生处理,而存在其他字符的字符串则不会。

  
  ,

祝辞祝辞的在一个=' abc '
  在在在b=' abc '
  在在在a是b
  真正的

  ,

祝辞祝辞的在=癮b c”
  在在在b=' ab c '
  在在在a是b
  假
  

     

此外,Python其他的数据类型如字典(东西),列表(列表),集合(组)等,都是创建不同的对象

  
  ,

祝辞祝辞的在(1、2、3)=
  在在在b=[1, 2, 3]
  在在在a是b
  ,False>的在比;a={a: 1}祝辞祝辞祝辞b={a: 1}祝辞祝辞祝辞,一个是bFalse>的在祝辞
  

     

补充一个,下面这种情况是因为上一个[1,2,3]被回收了,在新建(4、5、6)时那片缓存又被用到了

  
  ,

祝辞祝辞的在id ([1, 2, 3])==id ((4、5、6))
  真正的
  在在在id ([1, 2, 3])
  36200264 l
  在在在(4、5、6)id ()
  36200264 l

     

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Python '=='及'是'相关原理解析