对Python中小整数对象池和大整数对象池的使用详解
作者:wangyunfeis 发布时间:2023-02-17 18:13:49
标签:Python,小整数,大整数,对象池
1. 小整数对象池
整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。
Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,
所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。
In [1]: a=-5
In [2]: b=-5
In [3]: a is b
Out[3]: True
In [4]: a=256
In [5]: b=256
In [6]: a is b
Out[6]: True
In [7]: a=1000
In [8]: b=1000
In [9]: a is b
Out[9]: False
intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。
In [13]: a="abc"
In [14]: b="abc"
In [15]: a is b
Out[15]: True
In [16]: a="helloworld"
In [17]: b="helloworld"
In [18]: a is b
Out[18]: True
In [19]: a="hello world"
In [20]: b="hello world"
In [21]: a is b
Out[21]: False
s1 = "abcd"
s2 = "abcd"
print(s1 is s2)
s1 = "a" * 20
s2 = "a" * 20
print(s1 is s2)
s1 = "a" * 21
s2 = "a" * 21
print(s1 is s2)
s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2)
s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2)
# True
# True
# False
# True
# False
2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以
这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。
C1.b is C2.b
In [22]: a=1000
In [23]: b=1000
In [24]: a is b
Out[24]: False
In [25]: a=-1888
In [26]: b=-1888
In [27]: a is b
Out[27]: False
In [28]:
c1 = 1000
d1 = 1000
print(c1 is d1) # True
class C1(object):
a = 100
b = 100
c = 1000
d = 1000
class C2(object):
a = 100
b = 1000
print(C1.a is C1.b) # True
print(C1.a is C2.a) # True
print(C1.c is C1.d) # True
print(C1.b is C2.b) # False
来源:https://blog.csdn.net/wangyunfeis/article/details/77607156


猜你喜欢
- 一、文件的编码计算机中有许多可用编码:UTF-8GBKBig5等UTF-8是目前全球通用的编码格式除非有特殊需求,否则,一律以UTF-8格式
- 这个功能现在很多网站,论坛都有,本站也有呵呵!如果您还不知道如何实现这个功能,没关系看看本文吧!我将给你介绍怎么给你的网站加上运行代码框的功
- 本文实例讲述了Go语言算法之寻找数组第二大元素的方法。分享给大家供大家参考。具体如下:该算法的原理是,在遍历数组的时,始终记录当前最大的元素
- 五、过渡转化的使用在《mind hack》一书中,揭示了人脑鲜为人知的工作原理。其中提到了“突然的移动或闪烁会吸引人的注意力,这正是负责视觉
- 插入mysql时,如果内容中有引号等特殊符号,会报错,解决方法可以用反斜杠转义,还可以用pymysql的一个方法自动转义:c = '
- 这篇论坛文章(赛迪网技术社区)主要介绍了MySQL数据库主从复制的相关概念及设置方法,详细内容请大家参考下文:MySQL支持单向、异步复制,
- PyQt5 QtChart-散点图QScatterSeries类将数据以散点图显示import sysimport randomfrom P
- 最近,随着数据库的日益庞大,本来两个差不多的数据库,我开始发现我的数据库查询起来越来越比我朋友网站的慢了,经过初步对照,问题好像出在访问记录
- js数字转换为float,取N个小数:=========================================javascript
- 使用python完成超级基础的学生管理系统,供大家参考,具体内容如下说明:1、本学生管理系统非常非常简易,只有增,显,查,删,改功能,对于P
- 很多人可能认为门户网站首页设计只是把一些导航、资讯内容和广告堆积起来摆放得好看就可以了,虽然这个观点也并不是完全错误的,确实门户网站首页是由
- 函数局部变量 全局变量 及其作用域#简单类型(int str等)变量的局部变量与全局变量及其作用域的关系name = "xxx&q
- 为了能让PHP连接MSSQL,系统需要安装MSSQL,PHP,且在PHP.ini中的配置中,将 ;extension=
- 思路:遍历文件夹下面的文件夹如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文
- 增加异常捕获,更容易现问题的解决方向import sslimport urllib.requestfrom bs4 import Beaut
- ORACLE访问SQL SERVER数据库有一篇《Oracle 异构服务实践》讲得很清楚。但里面没有讲如何设置访问多个SQL Server数
- Python 字符串描述Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).语法rstrip()方法语法
- 简介增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进
- 可以采用exec方法注意:使exec不能返回一些变量的值,而且当前的变量值在exec的语句里无效。declare @tempStr
- ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类