在python中,为了优化速度,避免频繁申请和销毁内存空间,python使用小整数池来缓存 range(-5,257) 之间的整数(这里不包含257),这些小整数在赋值引用时使用的都是同一个对象和内存地址。

>>> print(id(-6), id(-5), id(256), id(257))
4395081424 4305320256 4305328608 4395080176 >>> print(id(-6), id(-5), id(256), id(257))
4397424720 4305320256 4305328608 4395080720 >>> print(id(-6), id(-5), id(256), id(257))
4397424880 4305320256 4305328608 4395081424
a = -5
b = -5
print(a is b)
# True a = 1000
b = 1000
print(a is b)
False

与此类似,对于字符串,python中有一个intern机制,用来优化常用字符串对象的内存分配。长度不大于20而且不包含特殊字符的字符串在引用时指向同一个对象和内存地址。

>>> a = 'abc'
>>> b = 'abc'
>>> a is b
True >>> a = 'a'*20
>>> b = 'a'*20
>>> a is b
True >>> b = 'a'*21
>>> a = 'a'*21
>>> a is b
False >>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False >>> b = 'hello2world'
>>> a = 'hello2world'
>>> a is b
True

参考:

http://liuzhijun.iteye.com/blog/2263296

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

小整数池和intern机制的更多相关文章

  1. python 小整数池 和intern 【整理】

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

  2. python垃圾回收机制与小整数池

    python垃圾回收机制 当引用计数为0时,python会删除这个值. 引用计数 x = 10 y = x del x print(y) 10 引用计数+1,引用计数+1,引用计数-1,此时引用计数为 ...

  3. 编程语言和python介绍, 变量,小整数池,垃圾回收机制

    1.编程语言的发展史 计算机是基于电工作(基于高.低电平)1010010101011 1.机器语言 优点:执行速度够快 缺点:开发效率非常低 2.汇编语言(通过英文字符组成) 优点:执行效率相较于机器 ...

  4. python代码块,小数据池,驻留机制深入剖析

    一,什么是代码块. 根据官网提示我们可以获知: 根据提示我们从官方文档找到了这样的说法: A Python program is constructed from code blocks. A blo ...

  5. 1.字符串池化(intern)机制及拓展学习

    1.字符串intern机制 用了这么久的python,时刻和字符串打交道,直到遇到下面的情况: a = "hello" b = "hello" print(a ...

  6. python-面试常用 --变量、内存管理(小整数池,引用计数)

    执行Python程序的两种方法 第一种:交互式(jupyter就是对这种进行了封装) 优点:直接给出结果 缺点:无法保存 第二种:命令行式,通过Python解释器输入文本(pycharm对这种进行了封 ...

  7. Python的小整数池

    此处经常会作为面试题!!! 小整数池目的:节省内存,提高执行效率 需要注意的是:Python实现int的时候有个小整数池.为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器 ...

  8. 介绍python由来, 安装python3.8.3 及其变量的定义, 小整数池

    介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来自Guido所挚爱 ...

  9. python中小整数对象池及intern机制

    小整数对象池: Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁 Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收,所有位于这个范围 ...

随机推荐

  1. python语言程序设计9

    1, 数字转换形式中有很多东西都不会,但是总不能放仍不管把? 总结点东西吧,比如 print()中增加end=""参数表示输入后不增加换行,多个print可以连续输出. 2, 我还 ...

  2. 【JVM.5】类文件结构

    鲁迅曾经说过:代码编译的结构从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步. 一.无关性的基石 Java设计者在最初就承诺过“In the future, we will ...

  3. NFS共享文件系统部署

    1. 概述 本篇博客主要是介绍如何安装和使用NFS服务. 2. 安装软件包 首先确认系统是否已经安装相应的软件包,执行命:rpm -qa | egrep "rpcbind|nfs-utils ...

  4. PEP8 Python编程规范

    官方文档: https://www.python.org/dev/peps/pep-0008/ ---------------------------------------------------- ...

  5. springboot undertow替换tomcat方式

    版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560说明        undertow,jetty和tomcat可 ...

  6. linux-文件数据操作awk命令

    最后一列是:交互外壳 单引号里的内容不会被bash扩展 cut 同样可以做到 "\t" 制表符 cut 和 sed 结合同样可以实现 扩展:匿名方法可以有多个,and方法只能有一个 ...

  7. 龟速机器学习总结----day1

    机器学习主要工作大致分为以下几步,数据预处理,包括数据切分,特征选取,数据缺失值处理,来了解数据.接下来分割数据,分别分出训练集和测试集.第三步,选择模型,使用训练数据训练模型参数,再对测试数据进行预 ...

  8. Linux内核分析——ELF文件格式分析

    ELF文件(目标文件)格式主要三种: 1)可重定向文件:文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件.(目标文件或者静态库文件,即linux通常后缀为 ...

  9. Asp.net框架与SpringMvc框架简单分析

    (此文为自我总结,错误很多请勿借鉴) 1.就前两天分析SpringMvc框架中是通过controler来实现跳转页面,通过mapping来实现数据连接 分析的方法又通过java的类之间进行相互调用,个 ...

  10. layui使用记录

    一.layui表格渲染 如果后台返回的实力类里面包含另一个实体类,那么需要使用如下方式取出相应的值 var tableResult = table.render({ elem: '#' + Serve ...