小数据池

一、小数据池

1)代码块

python程序是由代码块构成的,一个代码块的文本作为pythont程序执行的单元

官方文档:
A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks:
a module, a function body, and a class definition. Each command typed interactively is a block. A script file (a file given as standard input to the
interpreter or specified as a command line argument to the interpreter) is a code block. A script command (a command specified on the interpreter command
line with the ‘-c‘ option) is a code block. The string argument passed to the built-in functions eval() and exec() is a code block. A code block is executed
in an execution frame. A frame contains some administrative information (used for debugging) and determines where and how execution continues after the code
block’s execution has completed.

一个代码块:

  • 一个模块(module)
  • 一个函数(function)
  • 一个类(class)
  • 每一个command命令
  • 一个文件(file)
  • eval()
  • exec()

2)id()

通过id()可以查看到一个变量表示的值在内存中的地址

s = "hello"
print(id(s)) #

3) is 和 == 区别

  • ==:判断左右两端的值是否相等
  • is:判断左右两端内容的内存地址是否一致。如果返回True,那可以确定这两个变量使用的是同一个对象

如果内存地址相同,则值一定是相等的,如果值相等,则不一定同一对象

a = 100
b = 100
print(a is b) # True
print(a == b) # True
a = 1000
b = 1000 print(a == b) # True
print(a is b) # False 在command命令下为False, 在.py文件中(例如pycharm中)得到的结果为True。(详情见下面)

4) 小数据池

  • 一种缓存机制,也被称为驻留机制。各大编程语言中都有类似的东西。网上搜索常量池,小数据池指的是同一个内容
  • 小数据池只针对:int(整数), string(字符串), bool(布尔值)。其他数据类型不存在驻留机制

优点:能够提高字符串、整数的处理速度。省略了创建对象的过程。

缺点:在"池"中创建或者插入新的内容会花费更多的时间。

1.整数

官方文档:
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behavior of Python in
this case is undefined.
  • 在python中,-5~256会被加到小数据池中,每次使用都是同一个对象
  • 在使用的时候,内存中只会创建一个该数据的对象,保存在小数据池中。当使用的时候直接从小数据池中获取对象的内存引用,而不需要重新创建一个新的数据,这样会节省更多的内存区域。

2.字符串

Incomputer science, string interning is a method of storing only onecopy of each distinct string value, which must be immutable. Interning strings makes 
some stringprocessing tasks more time- or space-efficient at the cost of requiring moretime when the string is created or interned. The distinct values are
stored ina string intern pool. –引⾃自维基百科
  • 如果字符串的长度是0或者1,都会默认进行缓存。(中文字符无效)
  • 字符串长度大于1,但是字符串中只包含数字,字母,下划线时会被缓存。
  • 用乘法得到的字符串:1)乘数为1,仅包含数字,字母,下划线时会被缓存。如果包含其他字符,而长度<= 1也会被驻存(中文字符除外)。2)乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20
  • 指定驻留:可以通过sys模块中的intern()函数来指定要驻留的内容。(详情见sys模块相关内容)

5)代码块缓存机制

在代码块内缓存机制是不一样的:

  • 在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,再遇到新的初始化对象命令时,先在字典中查询其值是否已经存在,如果存在,那么它会重复使用这个字典中的之前的这个值。即两变量指向同一个内存地址。
  • 如果是不同的代码块,则判断这两个变量是否满足小数据池的数据,如果满足,则两变量指向同一个地址。如果不满足,则得到两个不同的对象,即两变量指向的是不同的内存地址。

注意:对于同一个代码块,只针对单纯创建变量,才会采用缓存机制,对于创建变量并同时做相关运算,则无。

a = 1000
b = 1000 print(id(a)) #
print(id(b)) #
print(a is b) # True .py文件运行
a = 1000
b = 10*100 print(id(a)) #
print(id(b)) #
print(a is b) # False .py文件运行

6)小数据池与代码块缓存机制区别与联系

  • 小数据池与代码块对缓存数据类型要求不一致,代码块只针对单纯创建变量有效,而对整数大小,字符串字符要求及长度无限制。
  • 对于代码块缓存机制:如果不满足代码块缓存机制,则判断是否满足小数据池数据,如果满足,则采用小数据池缓存机制。
a = 5*5
b = 25 print(id(a)) #
print(id(b)) # print(a is b) # True .py文件运行
a = "Incomputer science, string interning is a method of storing only onecopy of each distinct string value"
b = "Incomputer science, string interning is a method of storing only onecopy of each distinct string value" print(id(a)) #
print(id(b)) # print(a is b) # True .py文件运行

小数据池 is 和 ==的区别的更多相关文章

  1. python基础之小数据池,is和==区别 编码问题

    主要内容 小数据池,is和==区别 编码问题 小数据池 一种缓存机制,也称为驻留机制,是为了能更快提高一些字符串和整数的处理速度is 和 == 的区别 == 主要指对变量值是否相等的判断,只要数值相同 ...

  2. 小数据池,is和==的区别,id()

    小数据池 概念  存放数据缓存的地方 目的   节省内存,提高效率 什么数据会被缓存(什么数据会放在小数据池中)    数字  字符串    布尔 优点: 可以帮我们快速的创建对象.节省内存. 缺点: ...

  3. python 浅谈小数据池和编码

    ⼀. ⼩数据池 在说⼩数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法: A Python program is constructed from code b ...

  4. 6.Python初窥门径(小数据池,集合,深浅拷贝)

    Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...

  5. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

  6. python2与python3的区别 ,小数据池 bytes 类型

    一.python2和3的区别 在python3中 在python2中 print('ab')方式打印内容()括号是必须要有的.   print 'ab' 可以加可以不加. 只有range   有ran ...

  7. python之路--小数据池,再谈编码,is和 == 的区别

    一 . 小数据池 # 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. # id() 查看变量的内存地址 s = 'attila' print(id(s)) 二 ...

  8. Python基础学习Day6 is id == 区别,代码块,小数据池 ---->>编码

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  9. is 与 == 的区别;小数据池; 编码与解码

    1, is 与 == 的区别 ==  比较的是两边的值 is   比较的是两边的地址  id () 2,小数据池(在终端中) 数字小数据池的范围 -5 ~ 256 字符串中如果有特殊字符他们的内存地址 ...

随机推荐

  1. djangoAdmin组件

    定制后台页面功能 from django.contrib import admin from app import models # Register your models here. class ...

  2. Python type class metaclass

    'type' 是 python built-in metaclass 其他继承自 ‘type’的class都可以是 Metaclass 子类可以继承父类的metaclass 然而 __metaclas ...

  3. 546 Remove Boxes 移除盒子

    给定一些不同颜色的盒子,以不同的正整数表示.消去连续相同颜色的盒子,直到全部消除完毕为止.每一次消去可以得到k * k分(k为消去盒子的个数, k  >= 1).计算可以得到的最大得分.注意:盒 ...

  4. jsp九大内置对象响应类型

     内置对象            类型request            httpServletRequestout                jspWriterresponse         ...

  5. 在WIN7、WIN8中,将快捷方式锁定到任务栏,C#

    其实很简单,使用 API 函数 ShellExecute,就可以解决这个问题. 首先添加引用 using System.Runtime.InteropServices; 代码如下: using Sys ...

  6. React项目搭建(脚手架)

    首先我们需要安装node环境:download nodejs:https://i.cnblogs.com/EditPosts.aspx?opt=1 找到你需要的版本和系统安装包下载并安装. 这时候你可 ...

  7. hihocoder1636 Pangu and Stones

    思路: 区间dp.dp[l][r][k]表示把区间[l, r]的石子合并成k堆所需要的最小代价. 实现: #include <iostream> #include <cstring& ...

  8. mavon-editor 存储md文件以及md文件解析成html文件

    一.md文件的存储 因为是vue-cli项目,所以使用的是mavonEditor. github地址:https://github.com/hinesboy/mavonEditor 使用方法: 首先安 ...

  9. KMP字符串模式匹配详解

    KMP字符串模式匹配详解 http://www.cppblog.com/oosky/archive/2006/07/06/9486.html

  10. TitleBar(标题栏)的使用

    github地址:https://github.com/buhuiming/BHMAndroid 使用compile 'com.bhm.sdk.bhmlibrary:BHMLibrary:1.1.2' ...