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

一、内存地址(id):

  变量:将计算的中间结果储存起来,以便后续代码使用

    问题来了:变量存在哪里呢,或许可以这样问:变量储存在内存哪里呢?

      内存会进行分区,每个分区都有一个序号,而每个分区里面都储存着数据,变量就来自这里,而分区的序号就叫内存地址

  python 这门语言不像 C 语言,C 语言是属于内存级别的语言,C 涉及到指针,内存。而 python 不同,它的内存级别的已经设计好了。所以 python 比 C 简单,也正是如此,虽然 python 也有内存地址这个概念,但是它的内存地址和真实的内存地址是不一样的,只是 python 解释器虚拟的一个地址

name = ‘alex‘
print(id(name))         #查询‘alex’的内存地址

2471424258264

name = ‘alex‘
print(id(name))          #再次查询

1648814026968            #id出现变化

    一个等号 “=” 代表赋值,两个等号 “==” 代表比较是否相等

    is 内存地址是否相同  【验证内存地址是否相等不能在pycharm中进行,必须在终端验证】

因为第一个是 True 所以 i 和 i1 在内存中用的是同一个值,第二个是 False 所以 i 和 i1 在内存中用的是两个值    这就引出来小数据池的概念

二、小数据池  :

  只存在于 int(整数) str(字符串)当中,在一定范围内,如果两个数值相同:为了节省内存,共用一个内存地址。

int的范围:   -5 ~256 

str的限制条件【不知道全不全】:

                1.单个字母元素*个数(不能超过21)存在小数据池

                 2.自己设置的字符串(只包含数字字母),不管多大,都存在小数据池

三、编码的进阶

  1.不同的密码本之间的二进制是不能全互相识别的,容易报错或者产生乱码

#gbk  utf-8

#对于字母,数字,特殊符号的编码都是引用  ascii  码,所以可以直接转化。

s1 = ‘123asd*&^‘
b1 = s1.encode(‘utf-8‘)   #  转化为 utf-8 的字节
s2 = b1.decode(‘gbk‘)       #直接转化 gbk  的字符串
print(s2)

123asd*&^
 

补充:字母数字特殊字符,可以互相转换

  2.计算机的文件存储和传输都是二进制 010101 (gbk , utf-8 , ascii , gb2312) 不能是unicode(万国码,造成资源浪费)

大前提:python3x ,编码

  数据类型:

    int

    str

    bytes (字节) : str 拥有的所有方法,bytes都有

    bool

    list

    tupule  (元组)

    dict   (字典)

    set  (集合)

  str ; python3x  内存中的(字符串)编码方式是  Unicode  (规定)

    英文:

      str:表现形式   name = ‘alex‘

        内部编码: unicode

name = ‘alex‘
print(name,type(name))

alex <class ‘str‘>

      bytes:表现形式: name1 = b‘alex‘

         内部编码:非unicode

name1 = b‘alex‘
print(name1,type(name1))

b‘alex‘ <class ‘bytes‘>

    中文:

      str:表现形式: name = “中国”

        内部编码: Unicode

name1 = ‘中国‘
print(name1,type(name1))

中国 <class ‘str‘>

      bytes:表现形式:b‘\xe4\xb8\xad\xe5\x9b\xbd‘

        内部编码:非Unicode

name = ‘中国‘.encode(‘utf-8‘)
print(name,type(name))

b‘\xe4\xb8\xad\xe5\x9b\xbd‘ <class ‘bytes‘>    #\xe4 : 一个字节

四、str ---> bytes  转化        ‘字符串‘.encode(编码方式)     # encode 编码

  bytes--->str   转化               字节.decode(编码方式)    # decode  解码

    #  编码方式必须相同,否则会产生乱码或报错

name = ‘中国‘.encode(‘utf-8‘)
print(name,type(name))
name1 = name.decode(‘gbk‘)
print(name1,type(name1))

b‘\xe4\xb8\xad\xe5\x9b\xbd‘ <class ‘bytes‘>
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 2: illegal multibyte sequence          #报错

原文地址:https://www.cnblogs.com/songzijian/p/8992610.html

时间: 2024-07-29 20:40:19

18/5/4 小数据池,编码的进阶的相关文章

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

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

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

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

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

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

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

1. 小数据池小数据池在说小数据池之前. 我们先看一个概念. 什么是代码块:python程序是由代码块构成的. 一个代码块的文本作为python程序执行的单元.代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块, eval()和exec()执行的时候也是一个代码块 小数据池. 一种数据缓存机制. 也被称为驻留机制. 小数据池只针对: 整数, 字符串串, 布尔值. 其他的数据类型不存在驻留机制 在python中对-5到256之间的整数会

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

小数据池 (常量池 -&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学习之旅-06 之小数据池,编码

一.代码块 python程序的是由代码块构成的.一个代码块的文本作为python程序的执行单元. 1.在命令行中,每一行都是代码块 2.在py文件中,整个可执行内容为一个代码块 二.is 和 == 的区别 1.id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 s = 'alex' print(id(s)) # 4326667072 2.is 和 == ==判断左右两端的值是否相等,是否一致 is判断左右两端内容的内存地址是否一致.如果返回True,那么可以确定这两个变量使用的是