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]:

最新文章

  1. Those who are not capable of Control their moods are not supposed to be ready for their baby.
  2. Makefile 使用总结
  3. ubuntu环境变量
  4. HMAC算法AS3版
  5. Java maven安装GDAL
  6. linux进程编程:子进程创建及执行函数简介
  7. dubbo的安装和使用
  8. iOS 第三方自定义Alertview项目MBProcessHud中的重要代码分析
  9. http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!!
  10. NewtonPrincipia_物体的运动_求向心力
  11. PHP对XML文件操作类讲解
  12. CodeForces 732A Buy a Shovel (水题)
  13. oracle 基本语句练习(一) where, between ,null, like,转义字符,order by
  14. java mysql驱动
  15. 【转】编写Chrome扩展程序
  16. 深入分析MFC文档视图结构(项目实践)
  17. vmware克隆Centos6.7虚拟机网卡无法启动问题
  18. java并发包小结(一)
  19. Linux chattr和lsattr命令使用方法
  20. springboot启动配置原理之一(创建SpringApplication对象)

热门文章

  1. Sql Server中利用ISNULL方法判断数字并预设值
  2. Elasticsearch.yml
  3. Linux 服务器性能问题排查思路
  4. Python学习---Python下[列表]的学习
  5. Windows 编译 MQTT C++ Client
  6. FZU-1759 Super A^B mod C---欧拉降幂&指数循环节
  7. 关于mvvm:UI、数据、绑定、状态、中间变量、数据适配、数据处理
  8. YII中使用SOAP一定要注意的一些东西
  9. luogu P4231 三步必杀
  10. Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version) 【区间更新 线段树】