1. a is b 与 a == b有什么区别

is 比较id(),==比较值

>>> a = -5
>>> b = -5
>>> a is b
True
>>> a = -6
>>> b = -6
>>> a is b
False
  • Python为了优化效率,内置了小整数对象池和简单字符串对象池
  • 小整数对象池包括[-5, 256]。这之间的小整数数值相同时在小整数对象池中属于同一对象
  • 即是 a is b 返回True。简单字符串也是如此,对于其他对象则不适用

2. range() 与 xrange() 返回值有什么区别

xrange() 返回生成器,range() 返回列表。Python3中已删除xrange()range()返回生成器

3. Python中的多线程

在默认的CPython解释器中,多线程只能交替执行,并不能做到真正的并发执行。

解释器执行代码时,有一个GIL(Global Interpreter Lock)锁,任何线程在执行前,必须先获得GIL锁,然后,发生IO或执行一定数量字节码时,解释器就自动释放GIL锁,让别的线程有机会执行。