Python小整数池的概念

前面我们说了,只要是赋值操作,产生新的值的时候,都会申请一块内存空间。只要申请了新的内存空间,他的内存地址就会不一样,id也会不一样。

现在我定义a=10,b=10,按照我们前面分析的,这两串代码一运行,肯定申请两块内存空间把值丢进去然后分别绑定给这两个变量a和b。所以它们的id肯定不一样。

我们先来看a的id号,注意在Python的交互式环境里,敲回车之后,代码会立即执行,并且会直接把结果展示出来。所以这里不用print也能看到结果。

再来看b的id号。

这又是什么情况,为什么两个id号又变成一模一样的了?是不是这个傻逼老师在骗我?

再用is看一下,是不是True?居然还是True!按照我们前面分析的这两个id号不可能一样啊!

现在我们分析一下,申请内存空间,把值存进去,这就是一种写操作,就是前面讲引荐基础的时候我们说的io操作,不管是往硬盘里面读数据还是往内存里写数据这都叫io操作。

前面我们也说了,cpu的运算速度是相当快的,比内存的读写速度快,比硬盘的读写速度更快,所以一旦你的程序里有了io操作,就会拖慢了你的cpu的速度。所以python就帮我们做了一步优化叫小整数池。

为了避免因创建相同的值,而重复申请内存空间所带来的效率,Python解释器会在启动那一刻开始创建小整数池。范围是-5到256。就是只要Python解释器一启动,就立马申请一堆内存空间,把这些值放进去。

这些整数在我们写程序的过程中太常见了所以Python给我们做了优化,这个范围内的小整数被重复使用时,就不会再申请新的内存空间。而这些小整数永远不会被垃圾回收机制回收。

我们再来看,c=5+5,这样c=10了,然后再打印id(c),结果c的id号就和a和b的id号一样。所以说只要你程序运行过程中产生了10这个值。它就不会再去给你申请新的内存空间造一个新的值出来了,它会直接使用现成的。这样对你程序运行的效率就是一种提升。

刚刚说了小整数池的范围-5到256,留个课后作业,现在定一两个变量a=257,b=257。看看他们的两个id号是不是一样的!

未经允许不得转载:445IT之家 » Python小整数池的概念

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏