id():

  • 获取对象的内存地址:print(id(i))

== :

  • 比较两边的值是否相同

is :

  • 判断内存地址是否相同

    • id相同,值一定相同
    • 值相同,id不一定相同

代码块:

  • Python是由代码块构造的。块是一个Python程序的文本,它是作为一个单元执行的。
  • 一个模块、一个函数、一个类、一个文件等都是一个代码块。
  • 同一个文件中的两个函数,也分别是两个不同的代码块。
  • 在交互式中输入的每个命令都是一个代码块。

两个机制:

  • 同一代码块下的缓存机制:

    • Python在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在, 如果存在,会将值重用。换句话说:执行同一个代码块是,遇到初始化对象的命令时,会将初始化的变量和值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录,那么它会重复使用这个字典中的值。
  • 缓存机制的优点:
    • 节省内存空间,增加性能。
# 例:
s1 = 'abc'
s2 = 'abc'
print(id(s1))
print(id(s2))
# 在例子中,文件执行时(同一个代码块)会把s1、s2两个变量指向同一个变量
# 满足缓存机制则他们在内存中只存在一个,即:id相同

适用对象:

  • int :所有数字
  • bool :True和False在字典中会以1,0方式存在,并且复用
  • str :几乎所有的字符串都会符合缓存机制

不同代码块的缓存机制:也称小数据池

  • Python自动将-5 ~ 256的整数进行了缓存,

    当你将这些整数复制给变量时,并不会重新创建对象。
  • Python会将一定规则的字符串在字符串驻留池中,创建一份

    当你将这些字符串赋值给变量时,并不会重新创建值,而是使用在字符串驻留池中创建好的对象。

适用对象:

​ int:-5 ~ 256 之内的整数

​ bool

​ str:满足规则的字符串

is, ==, id 用法、代码块和缓存机制的更多相关文章

  1. Python中的代码块及其缓存机制、深浅copy

    一.代码块及其缓存机制 代码块 一个模块.一个函数.一个类.一个文件等都是一个代码块:交互式命令下,一行就是一个代码块. 同一个代码块内的缓存机制(字符串驻留机制) 机制内容:Python在执行同一个 ...

  2. is == id 的用法;代码块;深浅copy;集合

    1 内容总览 is == id 用法 代码块 同一代码块下的缓存机制 (字符串驻留机制) 不同代码块下的缓存机制 (小数据池) 总结 集合(了解) 深浅copy 2 具体内容 id is == # i ...

  3. python的代码块缓存机制,小数据池机制。

    同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...

  4. Python 小数据池和代码块缓存机制

    前言 本文除"总结"外,其余均为认识过程:3.7.5: 总结: 如果在同一代码块下,则采用同一代码块下的缓存机制: 如果是不同代码块,则采用小数据池的驻留机制: 需要注意的是,交互 ...

  5. Python代码块缓存、小数据池

    引子 前几天遇到了这样一道Python题目:a='123',b='123',下列哪个是正确的? A. a != b B. a is b C. a==123 D. a + b =246 正确答案是B 是 ...

  6. python代码块和小数据池

    id和is 在介绍代码块之前,先介绍两个方法:id和is,来看一段代码 # name = "Rose" # name1 = "Rose" # print(id( ...

  7. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  8. 五.python小数据池,代码块的最详细、深入剖析

    一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是 ...

  9. python 小数据池,代码块, is == 深入剖析

    python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了, ...

随机推荐

  1. 第2课 - 搭建Lua开发环境

    第2课 - 搭建Lua开发环境 1. Lua 的优点 (1)Lua 使用标准的 ANSI C 进行开发,可以无缝集成到宿主程序,且几乎支持所有平台. (2)Lua 是开源且免费的软件,以源码的方式直接 ...

  2. [计算机网络]TCP/IP协议-运输层

    TCP/IP体系结构 TCP/IP四层协议 五层协议 协议 作用 应用层 应用层 HTTP超文本传输协议.FTP文件传输协议 - 运输层 运输层 TCP(面向连接的,可靠的).UDP(无连接的,不保证 ...

  3. [IDEA]Java:“程序包XXX不存在”问题的三种解决方案

    ###三种方案 ####01 出现jar包找不到的问题,首先有可能是项目依赖中有些jar没有下载完整 而mvn idea:idea这个命令可以检查并继续下载未下载完整的依赖jar. 在命令行输入mvn ...

  4. 5.Strom-事务型拓扑

  5. Ubuntu16环境安装和使用NFS

    通过NFS服务我们可以方便的读写服务器上的文件,一起来实战Ubuntu16环境安装和使用NFS: 文章概要 本次实战由以下步骤组成: 列举环境信息: 在192.168.119.128安装NFS服务,将 ...

  6. Unity 自己使用顶点描绘圆形UI图片

    2020-09-10 在游戏的UI中,圆形图片的需求是很高的,但是,在Unity中想要实现圆形UI,一般的做法是是使用圆形Mask(遮罩),但是使用Mask的缺点很明显,主要有三点: 1.比较麻烦,使 ...

  7. 面试官:分库分表之后,id 主键如何处理?

    面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全 ...

  8. Flutter中如何方便的获取音视频的长度

    此次主要是flutter集成im,在发送视频时需要加上时长,但是用视频controller只能在初始化时具备路径才可以可以使用:just_audio插件中的方法进行获取 详情看官方文档:https:/ ...

  9. ubuntu桌面版修改屏幕刷新率之后无法进入桌面(一直卡在输入密码的界面)的解决办法

    deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb-src https://mir ...

  10. Spring Boot 项目打成 war 包部署

    Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署.其实 Spring Boot 也是 ...