18、零基础Python到全栈-小整数池的概念

liftword5个月前 (02-14)技术文章36

前面我们说了,只要是赋值操作,产生新的值的时候,都会申请一块内存空间。只要申请了新的内存空间,他的内存地址就会不一样,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号是不是一样的!

相关文章

Python初学者练习:计算一个整数的各位数字之和

在这篇文章中,我们将编写一个程序来计算一个整数中各位数字的之和。示例:123:1+2+3=6方法1:使用while循环和整除运算符“//”、取余运算符“%”来计算这个python程序使用while循环...

Python如何判断一个数是不是整数?答案没那么简单

在Python里,如果我们想判断一个数是不是整数,应该如何操作呢?使用type方法很多人首先想到的是使用type方法,例如:x = 0 type(x) == int这个方法看上去很简单,但在Pytho...

「Python条件结构」if…else实现判断整数是否能不3和5整除

功能要求编写一个控制台应用程序,输入一个整数,判断它是否能同时被3和5整除,如能被整除则打印该数,显示“此数不能同时被3和5整除!”。实例代码num = int(input("请输入一个整数:"))i...

编程脑洞:如何用一个整数来表示一个列表?

原题 | Storing a list in an int (https://iantayler.com/2020/12/07/storing-a-list-in-an-int)作者 | Comput...

用Python实现列表排序,给定列表并进行升序降序排序(第一节)

我们在生活中常常会遇到一堆无序的数字,有时候为了让结果更加直观,常常需要对这些无序的数字进行升序或者降序排序,那么今天呢,也正好是Python复习的第一节,那么就来谈一谈如何用Python语言来实现列...

百分号%在python中的用法_百分号在python中代表什么

百分号%在python中主要是两个作用:数学运算符号和格式化输出。下文分别详细说明。1、数学运算符号,求余数在整数的除法中,有能整除与不能整除两种情况。所谓余数,余数指整数除法中被除数未被除尽部分,p...