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. RFID了解

    转载自为什么大家都抛弃传统标签选择RFID电子标签? rfid电子标签是一种非接触式的自动识别技术,它通过射频信号来识别目标对象并获取相关数据,识别工作无需人工干预,作为条形码的无线版本,RFID技术 ...

  2. Socket 核心原理分享

    Socket 的个人故事.希望通过这篇文章让你弄懂什么是 Socket,明白 TCP 和 UDP 协议的通讯,明白长连接和短连接的优缺点,明白 BIO.NIO.AIO的区别. Socket 大家好,我 ...

  3. java代码复用(继承,组合以及代理)

    作为一门面向对象开发的语言,代码复用是java引人注意的功能之一.java代码的复用有继承,组合以及代理三种具体的表现形式,下面一一道来. 第一种方式是通过按照现有的类的类型创建新类的方式实现代码的复 ...

  4. 前端性能测试工具之PageSpeed Insights

    谷歌开发的一个免费的网页分析工具,在地址栏中输入被分析的网站 url 地址,点击分析 地址:https://developers.google.cn/speed/pagespeed/insights/ ...

  5. pormise和async

    pormise 1.异步问题 假设现在我刚认识你,需要和你说话,但是我普通话不够标准,需要间隔一秒钟才能说一句话,以此让你可以慢慢思考.这样的话我们就需要用到定时器. 最沙雕的代码如下: setTim ...

  6. myisamchk是用来做什么的?MyISAM Static和MyISAM Dynamic有什么区别?

    myisamchk是用来做什么的? 它用来压缩MyISAM[歌1] 表,这减少了磁盘或内存使用. MyISAM Static和MyISAM Dynamic有什么区别? 在MyISAM Static上的 ...

  7. IdentityServer4系列 | 初识基础知识点

    前言 我们现在日常生活中,会使用各式各样的应用程序,层出不穷,其中有基于网页浏览方式的应用,有基于手机端的App,甚至有基于流行的公众号和小程序等等,这些应用,我们不仅要实现各个应用的功能之外,还要考 ...

  8. 【Hadoop】伪分布式安装

    创建hadoop用户 创建用户命令: sudo useradd -m hadoop -s /bin/bash 创建好后需要更改hadoop用户的密码,命令如下: sudo passwd hadoop ...

  9. Webstorm破解版安装教程

    Webstorm破解版: 安装包链接见:https://pan.baidu.com/s/1XJqRtM9C4M8AmH50S9dVDQ 提取码: dah3 内附安装教程, 原创文章,转载请先联系作者

  10. 制作u盘启动盘

    制作u盘启动盘 如果是想要制作 windows 系统启动盘,windows 官网提供途径,这里不在赘述. 以下讨论制作 centos 系统启动盘,需要 centos 系统文件,开源,可从官网下载得到. ...