文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python学习笔记:第6天 小数据池和

2023-01-30 22:35

关注

目录

  • 1. id 和 ==
  • 2. 小数据池
  • 3. 编码和解码

1. id 和 ==

  • idid是一个内置的函数,可以查看变量存放的内存地址(实际上不是真正的物理地址,这里暂时这样理解),用于判断是变量否属指向了同一块内存地址
  • ==:== 可以用于判断两个变量的值是否相等,这个在之前的例子中也有用过

下面来看几个例子,以及具体的使用方法:

In [1]: a = 'abc'

In [2]: b = 'abc'

In [3]: a == b
Out[3]: True

In [4]: a is b
Out[4]: True

In [5]: c = 100

In [6]: d = 100

In [7]: c == d
Out[7]: True

In [8]: c is d
Out[8]: True

In [9]:

通过上面的例子可以总结出:字符串和数字在之前有定义过的话,后续再用到这个变量时,不会再分配内存,而是直接把新的变量直接指向之前定义过的值,因此使用is判断时结果都为True,这种机制被称作为缓存机制。但是这里也有比较坑的一点,我们再来看下面的例子:

In [9]: c = 1000

In [10]: d = 1000

In [11]: c is d
Out[11]: False

In [12]:

同样是数字,但是100和1000的结果却不一样,这个要根据下面的一个知识点来看。

2. 小数据池

通过上面的例子可以看出,100和1000的值在经过相同的运算之后得到不同的结果,那么我们可以这样认为:如果内存地址一样,那么对应的值一定是相等的,但是反过来值一样的话内存地址不一定一样;我们先在来看几个例子:

In [15]: a = -5   
                  
In [16]: b = -5   
                  
In [17]: a is b   
Out[17]: True     
                  
In [18]: c = -6   
                  
In [19]: d = -6   
                  
In [20]: c is d   
Out[20]: False    
                  
In [21]: c = 300  
                  
In [22]: d = 300  
                  
In [23]: c is d   
Out[23]: False    
                  
In [24]:

这种现象是因为小数据池的存在。小数据池(非官方解释):是一种缓存机制,也被称为驻留机制,其他语言中也有类似的机制,他会把数据存储起来方便下次赋值时使用,以避免多个内存存放相同值的元素。

小数据池对数据的处理方法:

  • 小数据池只针对数字、字符串和布尔值有效
  • 数字的处理:在python中对-5到256之间的整数会被驻留在内存中. 将⼀定规则的字符串缓存;
  • 对字符串的处理:如果字符串的⻓度是0或者1, 都会默认进⾏缓存;字符串⻓度⼤于1, 但是字符串中只包含字⺟, 数字, 下划线时才会缓存

使用小数据池的优缺点:

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

3. 编码和解码

编码回顾:

  • ASCII:是最早的一种编码,是其他编码的基础,占用8bit,1byte
  • GBK:中文国标码,16bit,2byte
  • Unicode:万国码,包含了全世界各国的语言,32bit,4byte
  • UTF-8:可变的Unicode,是Unicode的一种实现
    • 英文:8bit,1byte
    • 欧洲文字:16bit, 2byte
    • 中文:24bit,3byte

在网络传输和文件存储中,经常需要在各种编码之间转换,最常用的如UTF-8和Unicode等。
Unicode的表现形式:即python程序存储在内存中的字符串
byte表现的形式:

  • 英文:b'i like python',除了前面加b之外跟普通字符串一样
  • 中文:b'\xe4\xb8\xad'

字符编码之间的转换使用encode和decode操作:

In [24]: a = 'i like python'

In [25]: b = '我喜欢python'

In [26]: a.encode('utf-8')
Out[26]: b'i like python'

In [27]: b.encode('utf-8')                               # 编码成utf-8字符
Out[27]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python'

In [28]: c = b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python'

In [29]: c.decode('utf-8')                              # 以utf-8的编码来解码
Out[29]: '我喜欢python'

In [30]: b
Out[30]: '我喜欢python'

In [31]: b.encode('GBK')
Out[31]: b'\xce\xd2\xcf\xb2\xbb\xb6python'

In [32]: e =  b'\xce\xd2\xcf\xb2\xbb\xb6python'

In [33]: e.decode('GBK').encode('utf-8')               # 把GBK编码转换成UTF-8编码
Out[33]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python'

In [34]: f = e.decode('GBK').encode('utf-8')

In [35]: f.decode('utf-8')
Out[35]: '我喜欢python'

In [36]:
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯