第七天-数据池/常量池 编码补充

小数据池/常量池(坑,别纠结) :

  小数据池 一种数据缓存机制.也被称为驻留机制

  用缓存的前提: 数据可以被共享。不可变数据类型

  作用/意义:把数据存在小数据池 快速创建对象 共享 节省内存 解释字符串赋值问题等

  python中只针对:整数,字符串串,布尔值    注意共享的是不可改变的数据类型

  id()  is  ==

 1 # id() 查看一个变量表示的值的内存地址
 2 a = 1000
 3 b = 1000
 4 c = "lijie"
 5 print(id(a)) # 2602674608112  内存地址
 6 print(id(b)) # 2602674608112
 7 print(id(c)) #  2602703864248
 8
 9 # == 判断左右两边的值是否一致
10 print(a == b)  # 判断左右两边的值
11 print(a == c)
12
13 # is 判断左右两边的内容地址是否一致
14 print(a is b)  # 判断左右两边内容地址
15 print(b is c)

  缓存

  为什么有缓存 数据保存安全 速度快 加大吞吐量 分布式 异地部署(如 Google无盘数据中心)

  单纯的创建变量。都是有缓存的

1 # 单纯的创建变量。都是有缓存的
2 a = 49876
3 b = 49876
4 print(a is b)  # True
5 a = 49786*20
6 b = 49786*20
7 print(a is b) # True

  注意 在命令行中(command模式) 小数据池 int取值范围在[-5,256]

1 # 注意 在命令行中(command模式) 小数据池 int取值范围在[-5,256]
2 a = 2000
3 b = 2000
4 print(a is b) # 在py文件里面是True

  但在命令行中:

  原因: 在代码块内的缓存机制是不一样的 故在py文件里面是True 在command模式中是False

数据池不必纠结,了解会用就好,官方也没详细解释。

编码 转码:

  python3中使用的是unicode,python2中使用的是ascii码,但unicode 太长适合计算不适合存储. utf-8适合存储和传输.因此需要用用到编码转换.

  编码:  .encode()

  注意编码和解码时都需要制定编码格式.

 1 #.encode()
 2 s = "嘿en哈"
 3 s0 = "JJ"
 4 bs = s.encode("utf-8") # 制定utf-8格式
 5 bs0 = s0.encode("utf-8")
 6 # 英文编码之后结果和源字符串一致.中文编码之后的结果根据编码不同.编码结果不同.
 7 print(bs0) # b‘JJ‘ 英文编码后和原来一致
 8 print(bs)  # b‘\xe5\x98\xbfen\xe5\x93\x88‘  一个中文utf-8三字节
 9 bs0 = s0.encode("gbk")
10 bs = s.encode("gbk")
11 print(bs0) # b‘JJ‘
12 print(bs) # b‘\xba\xd9en\xb9\xfe‘  一个中文gbk 两字节

  解码:.decode()

1 j = b‘\xba\xd9en\xb9\xfe‘
2 j1 = j.decode("gbk")
3 print(j1)

  编码:存储和传输时 encode()

  解码:接收数据时 decode()

  b‘xxxxx‘这种格式的数据是bytes类型的数据  bytes是python中的最小数据单元

  数据传输(包括文字/图片/视频)都是bytes(如直播)————流程:编码——推流——解码——用户

1 # 练习 把一个utf-8编码变成GBK编码
2 bm = b‘\xe5\x98\xbfen\xe5\x93\x88‘
3
4 bm0 = bm.decode() # 先解码成Unicode
5 bm1 = bm0.encode("gbk") # 再编码成gbk
6 print(bm1)

原文地址:https://www.cnblogs.com/xi1419/p/9845040.html

时间: 2024-10-30 04:08:08

第七天-数据池/常量池 编码补充的相关文章

小数据池 (常量池 -> 字符串缓存) is和==的区别 重新看编码 以及编码之间相互转化

?. 小数据池 在说小数据池之前. 我们先看一个概念念. 什么是代码块: 根据提示我们从官?方?文档找到了这样的说法: 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 defin

(十三)class文件结构:常量池(转)

Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗地将任意一个有效的类或接口所应当满足的格式称为"Class文件格式",实际上它并不一定以磁盘文件的形式存在."Class文件"应当是一串二进制的字节流,无论以何种形式存在. 2.Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Cl

Jvm(35),class文件结构----常量池

Class文件格式 常量池 先了解常量池中需要存放哪些内容,再讨论用什么类来存放这些内容. 常量池中存放的内容 Class文件中包含常量池,那么我就需要知道常量池会包含哪些内容,接下来才是关心class格式文件用什么类型来存放这些内容. 字面量(Literal) 字面量比较接近于Java语言层面的常量概念,如文本字符串.声明为 final的常量值等. 符号引用(Symbolic References)符号引用则属于编译原理方面的概念,包括了下面三类常量: 类和接口的全限定名(Fully Qual

Java虚拟机原理图解-- 1.2、class文件中的常量池

了解JVM虚拟机原理 是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的.感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成<Java虚拟机原理图解> 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助. 上一章节&l

《Java虚拟机原理图解》 2、class文件中的常量池

了解JVM虚拟机原理 是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的.感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成<Java虚拟机原理图解> 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助. 上一章节&l

JVM内存结构和常量池

1.虚拟机的构成 虚拟结主要由运行时数据区.执行引擎.类加载器三者构成,我们所说的JVM内存模型指的就是运行时数据区. 2.运行时数据区组成和各个区域的作用 运行时数据区可以分为线程共享和线程不共享两部分,其中堆内存和方法区线程共享,本地方法栈.虚拟机栈.程序计数器线程不共享. 2.1.程序计数器 程序计数器(Program Counter Register),也有称作为PC寄存器.想必学过汇编语言的朋友对程序计数器这个概念并不陌生,在汇编语言中,程序计数器是指CPU中的寄存器,它保存的是程序当

String、常量池以及intert方法

.class文件常量池 常量池主要存放两类常量:字面量和符号引用. 字面量指文本字符串等. 符号引用指: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 编译期结束,当类加载器加载类时,.class文件常量被加入运行常量池,如果常量已存在则不再加载. .class文件常量对象(如String)被创建是预定好的,除非已常量已存在则不再加载. String intern方法 String str1 = new String("Hello"); String str2 = new

java---堆、栈、常量池的存储数据

说到Java中堆.栈和常量池,首先还是看看他们各自存放的数据类型吧! 堆:存放所有new出来的对象:栈:存放基本类型的变量数据和对象的应用,对象(new出来的对象)本身并不存在栈中,而是存放在堆中或者常量池中(字符串常量对象存放在常量池中):常量池:存放基本类型常量和字符串常量. 对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享.栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会自动消失.堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活

JVM【第七回】:【OutOfMemoryError异常之运行时常量池溢出】

如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法.该方法的作用是:如果池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象:否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用.由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中产量池的容量:代码如下: package oom; import ja