再谈编码---小数据池(概念)

  

1. 小数据池
小数据池
在说小数据池之前. 我们先看一个概念. 什么是代码块:
python程序是由代码块构成的. 一个代码块的文本作为python程序执行的单元.
代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块, eval()和exec()执行的时候也是一个代码块

小数据池. 一种数据缓存机制. 也被称为驻留机制.
小数据池只针对: 整数, 字符串串, 布尔值. 其他的数据类型不存在驻留机制

在python中对-5到256之间的整数会被驻留留在内存中. 将一定规则的字符串缓存. 在使用的时候,
内存中只会创建一个该数据的对象. 保存在小数据池中. 当使用的时候直接从数据池中获取对象的内存引用.
而不需要创建一个新的数据. 这样会节省更多的内存区域.

优点: 能够提高一些字符串, 整数的处理速度. 省略的创建对象的过程.
缺点: 在‘池‘中创建或者插入新的内容会花费更多的时间.

对于数字: -5~256是会被加到小数据池中的. 每次使用都是同一个对象.
对于字符串:
1. 如果字符串的长度是0或者1, 都会默认进行缓存
2. 字符串长度大于1, 但是字符串中只包含字母, 数字, 下划线时才会缓存
3. 用乘法的到的字符串.
①. 乘数为1, 仅包含数字, 字母, 下划线时会被缓存. 如果包含其他字符, 而长度<=1 也会被驻存,
②. 乘数大于1 . 仅包含数字, 字母, 下划线这个时候会被缓存. 但字符串长度不能大于20
4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留的内容.

在代码块内的缓存机制是不一样的. 在执行同一个代码块的初始化对象的命令时, 会检查是否其值是否已经存在,
如果存在, 会将其重用. 换句句话说: 执行同一个代码块时, 遇到初始化对象的命令时,
他会将初始化的这个变量与值存储在一个字典中, 在遇到新的变量时, 会先在字典中查询记录,
如果有同样的记录那么它会重复使用这个字典中的之前的这个值. 所以在你给出的例子中, 文件执行时(同一个代码块) 会把a, b两个变量指向同一个对象.
如果是不同的代码块, 他就会看这个两个变量是否是满足小数据池的数据, 如果是满足小数据池的数据则会指向同一个地址.
所以: a, b的赋值语句分别被当作两个代码块执行, 但是他们不满足小数据池的数据所以会得到两个不同的对象, 因而is判断返回False.

2. is和==的区别
1. id()
通过id()我们可以查看到?一个变量表示的值在内存中的地址.
s = ‘alex‘
print(id(s)) # 4326667072
2. is和==
== 判断左右两端的值是否相等. 是不是一致.
is 判断左右两端内容的内存地址是否一致. 如果返回True, 那可以确定这两个变量使用的是同一个对象

我们可以这样认为. 如果内存地址相同. 那么值一定是相等的. 如果值相等. 则不一定是同一个对象

3. 编码的问题
1. python2中默认使用的是ASCII码. 所以不支持中文. 如果需要在Python2中更改编码.
需要在文件的开始编写:
# -*- encoding:utf-8 -*-
2. python3中: 内存中使用的是unicode码.
编码回顾:
1. ASCII : 最早的编码. 里面有英文大写字母, 小写字母, 数字, 一些特殊字符. 没有中文,
8个01代码, 8个bit, 1个byte
2. GBK: 中文国标码, 里面包含了了ASCII编码和中文常用编码. 16个bit, 2个byte
3. UNICODE: 万国码, 里面包含了全世界所有国家文字的编码. 32个bit, 4个byte, 包含了ASCII
4. UTF-8: 可变长度的万国码. 是unicode的一种实现. 最小字符占8位
1.英文: 8bit 1byte
2.欧洲文字:16bit 2byte
3.中文:24bit 3byte
综上, 除了了ASCII码以外, 其他信息不能直接转换.

encode("GBK") # 编码
decode("GBK") # 解码

*****************
把GBK转换成UTF-8
先把GBK转化成Unicode
再将Unicode转化成UTF-8

原文地址:https://www.cnblogs.com/zpf666/p/9670163.html

时间: 2024-08-13 23:25:55

再谈编码---小数据池(概念)的相关文章

小数据池

小数据池概念&理解 is 两者之间的id是否相同 == 两边的数值是否相等 id 获取该对象的内存地址 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是一个代码块.如果在同一代码块下,则采用同一代码块下的换缓存机制.如果是不同代码块,则采用小数据池的驻留机制.# pycharm 通过运行文件的方式执行下列代码: 这是在同一个文件下也就是同一代码块下,采用同一代码块下的缓存机制.i1 = 1000i2 = 1000print(i1 is i2) #

python 浅谈小数据池和编码

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

python之路---06 小数据池 编码

二十二.小数据池, id()    进行缓存 1.小数据池针对的是: int, str, bool 2.在py文件中几乎所有的字符串都会缓存.   在cmd命令窗口中几乎都不会缓存   不同的解释器有不同的机制 3.id() 查看变量的内存地址 4. is和==的区别 is 比较的是内存地址 == 比较的是内容 当两个变量指向同一个对象的时候. is是True, ==也是True 5. 优点:快速创建对象,节省内存 缺点:缓存如果过大,影响速度会比较慢 二十三. 再谈编码 回顾: 1. asci

18/5/4 小数据池,编码的进阶

一.内存地址(id): 变量:将计算的中间结果储存起来,以便后续代码使用 问题来了:变量存在哪里呢,或许可以这样问:变量储存在内存哪里呢? 内存会进行分区,每个分区都有一个序号,而每个分区里面都储存着数据,变量就来自这里,而分区的序号就叫内存地址 python 这门语言不像 C 语言,C 语言是属于内存级别的语言,C 涉及到指针,内存.而 python 不同,它的内存级别的已经设计好了.所以 python 比 C 简单,也正是如此,虽然 python 也有内存地址这个概念,但是它的内存地址和真实

pyhon学习第六天 代码块,小数据池(缓存机制,驻留机制),is == id =,字符编码

1.代码块 能够实现某项功能的:模块,函数,类,文件 ##在python的交互模式下,一行代码就是一个代码块分别储存在不同文件中 2. id is ==和= =是赋值 ==比较两边数据内容是否相等 is 比较内存地址是否一致(内存里的id都是唯一的) id() 查看数据的id地址 3.小数据池(缓存机制,驻留机制): 小数据池是python对内存做的一个优化 优化内容:python将-5到256的整数.以及一定规律的字符串提前在内存找那个创建了固定的储存空间 适用小数据池的数据类型:*****

小数据池 (常量池 -&gt; 字符串缓存) 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

python基础之小数据池、代码块、编码

一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽然上面的缩进的内容都叫代码块,但是他不是python中严格定义的代码块.python中真正意义的代码块是什么? 块是一个python程序的文本,他是作为一个单元执行的.代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而对于一个文件中的两个函数,也分别是两个不同的代码块: def fu

python基础4(小数据池,编码,深浅拷贝)

1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num1 = 3 num2 = 3 i1 = id(num1) i2 = id(num2) #此时i1==i2 3.编码 ascii:     8位       1字节     表示一个字符 unicode:  32位     4字节     表示一个字符 utf-8 英文    8位    1字节 欧洲

python之路(内存,小数据池,编码等)

代码块: python真正的代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 但是,在python终端交互模式下,每一条代码都是一个代码块 python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中, 如果下面的代码在遇到初始化对象的命令,他会先从字典中寻找,如果存在相同的值,他会复用,指向的都是同一个内存地址. >>> i1 = 1000 可以理解为这一行在一个文件中. >>> i2 = 1000 可以理解为这一行在另