小整数对象池

整数在程序中的使用非常广泛,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=256In [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机制

Falseintern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于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" * 20s2 = "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

大整数对象池

说明:终端是每次执行一次,所以每次的大整数都重新创建,而在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

字符串intern机制与字符缓冲池

在编译过程中,字符串intern机制将所有的变量名进行intern,但对常量进行的intern有一点特殊的限制。能够intern的常量必须只包含[a-zA-Z0-9_],即字母数字加下划线,如果含有其他字符,就不会intern。在运行过程中,通过计算得到的字符串不会intern。

字符串有一个和小整数对象池相似的字符缓冲池,用于在运行过程中缓存单个字符,所以计算得到的字符串虽然不会intern,但如果是单个字符,就会使用到字符缓冲池。

总结

1. python代码被编译成code对象,通常一个code对象对应于一个作用域,作用域中重复出现的变量名以及常量在code中只保存一次。

2. 字符串intern机制主要作用于编译过程,在编译收集完变量和常量时,对变量和常量进行intern,而后构建一个code对象。

3. 字符串intern对常量的intern有限制,能够intern的常量必须只包含[a-zA-Z0-9_],即字母数字加下划线,如果含有其他字符,就不会intern。

4. 小整数对象池和字符缓冲池都是作用于运行过程中,python缓存小的整数和字符,当有变量使用这些对象时,不用额外创建对象。

材料来源原文:

https://www.cnblogs.com/luoheng23/p/11023848.html

https://blog.csdn.net/wangyunfeis/article/details/77607156

python整数池_【Python】Python中神奇的小整数对象池和大整数对象池相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. python画50个图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  4. python画简便的图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  5. python一张图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  6. python整数池_对Python中小整数对象池和大整数对象池的使用详解

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...

  7. python对象引用计数器_在Python中借助计数器对象对项目进行计数

    python对象引用计数器 前提 (The Premise) When we deal with data containers, such as tuples and lists, in Pytho ...

  8. python n个list如何组成矩阵_有序矩阵中第K小的元素amp;x的平方根(二分法篇)

    69. x的平方根 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例1: ...

  9. python整数运算_深入 Python (6) 整数对象的数学运算

    整数的基本运算 上一节讲到,在 PyLong_Type 中定义了整数类型的各种属性,比如整数类型的名称 "int".整数对象最常用的是一些数学运算,整数对象当然也是支持这些方法的, ...

最新文章

  1. 瑞尔森大学的计算机科学专业,瑞尔森大学有哪些专业处于世界顶尖水平?
  2. 2021-02-09 带初值的拉氏变换
  3. 数据库设计(概念、步骤)
  4. JS中令人发指的valueOf方法介绍
  5. android sd卡相关avc,Android 5.x 权限问题解决方法
  6. [linux]关于deepin截图软件在KDE桌面下无法使用粘贴的解决方法
  7. HTML学习总结(4)——表格/块/内联元素/iframe/颜色/脚本/实体
  8. 读掘金小册组件精讲总结3
  9. 曲折中前行的汉语编程
  10. 科普:淘宝网的反爬虫变迁史
  11. android简单悬浮窗源码,Android 悬浮窗的实现源码
  12. 人工神经网络——学习策略
  13. TypeScript-打包
  14. 微信 php 地图定位,微信公众号定位地图位置写入数据库,再显示地图的方法
  15. 历史笔记记录之 MySQL DBA 面试题目 答疑记
  16. 时间-1计算机世界中的时间概念
  17. IP协议及MAC帧格式
  18. vue svg弧线路线动画组件
  19. 智能车K60学习笔记
  20. 微信小程序image加载图片失败的处理方法

热门文章

  1. iOS开发-观察者模式
  2. Java 20年:JVM虚拟化技术的发展
  3. 使用HtmlGenericControl控件动态产生一些HtmlControls
  4. 我眼里的Exchange 2010 之:1—DAG
  5. Eclipes的使用小技巧
  6. Keras——模型的保存、读取及加载
  7. .NET Framework 4.7 安装
  8. HttpWebRequest在GetResponse时总是超时
  9. Intellij IDEA 快捷键整理
  10. PostgreSql与sqlserver对比杂记