一:变量存储的缓存机制

在同一文件(模块)里,变量存储的缓存机制 (仅对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. java this关键字的使用

    this关键字 this关键字只能在方法内部使用,表示对"调用方法的那个对象"的引用.      this的三个用法:      1.调用本类中的其他方法        如果在方法 ...

  2. 初读"Thinking in Java"读书笔记之第三章 --- 操作符

    更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型&qu ...

  3. mycat练习笔记

    学习要趁早,装逼莫等老. 刚刚开始接触到mycat, 当然要学习一下了.拿它来设置 mysql 的读写分离,分库分表,以及集群等. 官网: http://www.mycat.io/  有详情介绍,有G ...

  4. python代码规范和命名规范

    一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...

  5. CentOS系统Nginx安装配置,随时更新

    ./configure --prefix=/etc/nginx \ #指定安装目录 --sbin-path=/usr/sbin/nginx \ #指定执行路径--conf-path=/etc/ngin ...

  6. 【原创项目】GC Server 更新

    GC Server 是自己2年前开坑的一个项目,主要是为coder提供方便,内含轻便编译器(不含代码编辑器,就是你把.c/.cpp代码文件放到指定目录下然后打开程序编译),还有各种各样的有助于提升智力 ...

  7. String与StringBuffer之间的转换

    来源:http://www.oschina.net/code/snippet_2261089_47352 package demo; /* String与StringBuffer之间的转换 * Str ...

  8. 搭建SSM(Spring+SpringMVC+Mybatis)

    1.SpringMVC和Spring不需要什么特殊配置就可以结合 2.Mybatis和Spring (1)需要引入额外的jar包:mybatis-spring-1.2.2.jar (2)配置数据源 ( ...

  9. SpringMVC后台接受前台传值的方法

    1.HttpRequestServlet 接收前台传值 @RequestMapping("/go5") public String hello5(HttpServletReques ...

  10. 我的学习目标(目前已初步学习完Java语言基础)

    操作系统.尤其是内存/线程/进程方面 计算机网络协议,重点关注 TCP/UDP/HTTP. 数据结构与算法. 数据库 设计模式,熟练掌握常用的几种设计模式. Java语言基础.熟悉java语言基础,了 ...