一:变量存储的缓存机制

在同一文件(模块)里,变量存储的缓存机制 (仅对python3.x版本负责),那么

--对于Number (int bool float complex)

1.对于整型而言,-5~正无穷范围内的相同值 id一致

2.对于浮点数而言,非负数范围内的相同值 id一致

3.布尔值而言,值相同情况下,id一致

4.复数的id标识都不相同(在 实数+虚数 这样的结构中)

(1) int -5 ~ 正无穷范围内
var1 = 18
var2 = 18
print(id(var1),id(var2)) #相同
var1 = -99
var2 = -99
print(id(var1),id(var2)) #不相同
var1 = -6
var2 = -6
print(id(var1),id(var2)) #不相同

(2)float 非负数
var1 = 3.15
var2 = 3.15
print(id(var1),id(var2)) #相同
var1 = -6.88
var2 = -6.88
print(id(var1),id(var2)) #不相同

(3) bool 在布尔值相同的情况下 值得地址相同
var1 = False
var2 = False
print(id(var1),id(var2)) #相同

(4) 在实数 + 虚数的情况下 永远不一样
var1 = 5+3j
var2 = 5+3j
print(id(var1),id(var2)) #不相同
'''只有虚数的情况下,例外'''
var1 = 8j
var2 = 8j
print(id(var1),id(var2)) #相同

--对于容器类型部分
5.字符串而言,字符串值相同情况下,id一致
6.列表,元组,字典,集合无论什么情况,id标识都不同(但空元组的id标识一样)

(1)str
var1 = "你"
var2 = "你"
print(id(var1),id(var2)) #相同

(2)空元组
var1 = ()
var2 = ()
print(id(var1),id(var2)) #相同

(3)剩下所有的容器类型数据地址都不一样
var1 = (1,2,3)
var2 = (1,2,3)
print(id(var1),id(var2)) #不相同

var1 = []
var2 = []
print(id(var1),id(var2)) #不相同

var1 = {'a':1}
var2 = {'a':1}
print(id(var1),id(var2)) #不相同

二:数据驻留小数据池

不同文件(模块)里,部分数据驻留小数据池中 (仅对python3.x版本负责)

python提前在内存中创建了-5 ~ 256 范围的整数,驻留在了内存的一块区域.

如果是不同文件(模块)的两个变量,并在此范围具有了相同的值,

那么id一致.

小数据池只针对:int ,string,bool,以及空元祖(),None关键字   有效

对于字符串来说:

(1)字符串的长度为0或者1,默认驻留小数据池

(2)字符串的长度>1,且只含有大小写字母,数字,下划线时,默认驻留小数据池

(3)用乘法得到的字符串,分两种情况。

1)乘数为1时:

无论什么字符串 * 1 , 都默认驻留小数据池

2)乘数大于1时:

乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20

指定驻留

from sys import intern

a = intern('盲僧&*^^1234'*10)

b = intern('盲僧&*^^1234'*10)

print(a is b)

#可以指定任意字符串加入到小数据池中,无论声明多少个变量,只要此值相同,都指向同一个地址空间

*无论是缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率

python 基础之变量存储缓存机制与数据驻留小数据池的更多相关文章

  1. 变量存储缓存机制 Number (int bool float complex)

    # ###变量存储的缓存机制(为了节省空间) #Number (int bool float complex) # (1) int -5~正无穷范围内 var1 = 18 var2 = 18 var1 ...

  2. python中变量的缓存机制

    同一文件中, 变量的缓存机制 (在此范围内的相同值内存地址一样) Number: int:                -5 ~ 正无穷 float:             非负数 bool:  ...

  3. day3 python数据类型转换及变量的缓存机制

    类型转换 1,强制类型转换 1.1 number的转换(int,float,bool,complex) num1 = 10 num2 = 10.6 num3 = True num4 = 3 + 4j ...

  4. python小白——进阶之路——day2天-———变量的缓存机制+自动类型转换

    # ###同一文件,变量的缓存机制 ''' -->Number 部分 1.对于整型而言,-5~正无穷范围内的相同值 id一致 2.对于浮点数而言,非负数范围内的相同值 id一致 3.布尔值而言, ...

  5. Python基础 之 变量、用户交互、if条件语句、while循环语句、编码、逻辑运算

    一.Python介绍 Python 崇尚优美.清晰.简单 Python是一门动态解释型的强制性定义的语言. 二.编译型和解释型的区别 编译型:一次性将所有与程序编译成二进制文件. 缺点:开发效率低,不 ...

  6. Python基础之变量与常量

    目录 1. 变量 1.1 变量的定义和组成 1.2 变量名的命名规则 1.3 变量名的两种风格 2. 常量 3. 变量内存管理 3.1 变量的存储 3.2 垃圾回收机制 3.2.1 引用计数 3.3 ...

  7. Python 基础之一变量和赋值

    变量:程序在运行的时候会用到很多临时存储数据,这个时候就用到了变量,临时数据的名字. Python中变量不需要声明,直接可以使用,变量的数据类型由赋值确定. >>> name=&qu ...

  8. python基础8 - 变量2

    1. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开 ...

  9. python基础3 - 变量的基本使用和命名

    4.变量的基本使用 4.1 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建 等号(=)用来给变量赋值 = 左边是变量名 = 右边是存储在变量中的值 变 ...

随机推荐

  1. log4j的简介和使用

    一.log4j是什么 引用官网的介绍 Log4j is a fast and flexible framework for logging application debugging messages ...

  2. Mvaen仓库文件添加阿里镜像

    新手一枚,创建项目的时候下载Jar之类的特别慢,问过前辈才知道要去settings.xml里面增加一个阿里云服务.不添加这个的话是从国外的仓库下载,添加之后就能直接从国内下载了~ 步骤1:找到你的Ma ...

  3. 精进之路之HashMap

    HashMap本质的核心就是“数组+链表”,数组对于访问速度很快,而链表的优势在于插入速度快,HashMap集二者于一身. 提到HashMap,我们不得不提各个版本对于HashMap的不同.本文中先从 ...

  4. RabbitMQ中的RPC实现

    1.RPC简述 RPC,Remote Procedure Call 远程过程调用.通俗讲,两段程序不在同一个内存空间,无法直接通过方法名调用,就需要通过网络通信方式调用.对于RabbitMQ,本身就是 ...

  5. list映射

    例 1 List 解析介绍 >>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li] [2, 18, 16, 8] > ...

  6. 帝国cms中下拉框select的绑定

    在修改数据模型中,将下拉框的表示代码换成下: 将id换成自己的id地址.数据库查询中的classid换成自己创建栏目的id. <select name="diqu" id=& ...

  7. web端分享网页到各个网站JS代码(微信为生成二维码)

    /*分享到新浪微博,QQ空间,人人网,生成二维码*/ var myTitle=$("title").text(); var myHref = window.location.hre ...

  8. Linux中各个文件的作用

    1.bin: 存放的是执行的常用指令 2.boot: 启动系统的核心文件 3.dev: Linux将设备映射成文件,而dev中放的就是这些设备文件 4.etc: 各种配置文件 5.home: 用户的主 ...

  9. ubuntu16.04微信安装

    1.下载: git clone https://github.com/geeeeeeeeek/electronic-wechat/releases 2.移动微信客户端(下载解压重命名为wechat)到 ...

  10. StringBuilder

    在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空 ...