Python_006(is和==,小数据池)
一.is和==的区别
1.id()方法,可以查看一个变量的内存地址
lst = ["周杰伦", "燃哥"]
lst1 = ["周杰伦", "燃哥"]
print(id(lst))
print(id(lst1))
#输出结果:2016969304136
2016999144008
#可以看出地址不一致 s = "燃哥"
s1 = "燃哥"
# 小数据池. 会对字符串进行缓存, 为了节省内存
print(id(s))
print(id(s1))
#输出结果:2666201022288
2666201022288
#地址是一致的
总结:
1)python中是有一个小数据池的,如果你单纯的定义一个字符串,那么一般情况下都是会被添加到小数据池中
python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多空间,
2)小数据池也可对数字进行缓存,但也是有范围的-5~256是会被加的,超出则不加;
3)对于字符串:a:是纯字母和下划线.那么这个对象会被添加到小数据池,中文也是特殊字符,字符串中带有中文是不会被添加的
b:带有特殊字符的. 那么不会被添加到小数据池. 每次都是新的;例如:s1='@alxt'和s2='@alxt'地址不一样
c:如果是单一字母*n的情况.'a'*20,在20个单位内是可以的.超过20个单位就不会添加到小数据池中
2.== 双等表示的是判断是否相等,注意,这个双等比较的是具体的值,而不是内存地址
3.总结:is比较的是内存地址
==比较的是值
二.编码的补充
1.在python2默认使用的是ASCII码,所以不支持中文,如果想要在python2中更改编码,需要在文件的开始编写:
-*- encoding:utf-8 -*
2.在python3中:内存中使用的是unicode码
3.1 ASCII:最早的编码,没有中文,8个二进制位,一个字节;
3.2 GBK:中文国标码,里面包含ASCII编码和中文常用编码,16个二进制位(bit),2个字节;
3.3 Unicode:万国码,包含了全世界所有国家的文字的编码,32个二进制位,4个字节;
3.4 UTF-8:可变长度的万国码,是unicode的一种实现,英文:8位,1字节; 欧洲文字:16位,2字节; 中国文字:24位,3字节;
bytes的表现形式:英文:b"alex" 英文的表现形式和字符串没什么两样; 中文:b'\xe4\xb8\xad一个字的utf-8表现形式;
s = "alex"
bs = s.encode("GBK")
cs= s.encode("utf-8")
print(bs)
print(cs)
#输出结果:b'alex'
b'alex'
GBK => utf-8:
bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'
# 先解码成unicode字符串
s = bs.decode("GBK")
print(s)
# 在把字符串编码成UTF-8
bss = s.encode("utf-8")
print(bss)
#输出结果:饿了么
b'\xe9\xa5\xbf\xe4\xba\x86\xe4\xb9\x88'
Python_006(is和==,小数据池)的更多相关文章
- python2与python3的区别 ,小数据池 bytes 类型
一.python2和3的区别 在python3中 在python2中 print('ab')方式打印内容()括号是必须要有的. print 'ab' 可以加可以不加. 只有range 有ran ...
- id,is的用法,小数据池的概念及编码知识进阶
一:id 查询内存地址 name = 'alex' print(id(name)) li = [1,2,3] print(id(li)) 二:is 判断的是内存地址 name1 = 'alex@' ...
- 07_Python变量内存地址、小数据池
一.变量在内存中的地址 变量:用来标识(identify)一块内存区域.为了方便表示内存,我们操作变量实质上是在操作变量指向的那块内存单元.编译器负责分配.我们可以使用Python内建函数id()来获 ...
- Python二次编码、小数据池之心照神交
二次编码.解码.小数据池: encode(str:编码):参数编码方式,返回字节码. str_1 = "编码" str_2 = str_1.encode("utf-8&q ...
- day4-python基础-小数据池以及深浅copy浅讲
今天的目录是 1.小数据池 2.深浅copy 正文开始 1.小数据池 在说明今天的内容前,先说明一个在今天重复用到的一个知识点 ###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完 ...
- Python小数据池和字典操作
小数据池 #id 查看内存地址 #多个代码块可以使用小数据池 #一个代码块中有一个问题,就是重复使用 #数字 -5~256 #字符串 字符串 乘法总数长度不能超过20, 0,1除外 #不能有特殊字符 ...
- python基础之小数据池、代码块、编码和字节之间换算
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- python之路day06--python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码
python2#print() print'abc'#range() xrange()生成器#raw_input() python3# print('abc')# range()# input() = ...
- range 小数据池介绍
1.range 2.小数据池 1. range 范围 [起始位置:终止位置:步长]range(起始位置,终止位置,步长) #顾头不顾尾 3.小数据池 小数据池,也称为小整数缓存机制,或者称为驻留机制等 ...
随机推荐
- Jmeter之完整的HTTP接口测试
目前很多接口都是基于HTTP的,所以针对HTTP接口测试的了解很重要,下面就简单说明一下,一个基于Jmeter上HTTP接口测试需要的内容. 一.一个HTTP接口测试需要最基础的内容 如下: 简单说明 ...
- Delphi7中ClientDataSet的排序
http://eteda.iteye.com/blog/1141312 Delphi7中ClientDataSet的排序 博客分类: Delphi 1.控件ClientDataSet的属性Inde ...
- 类HashSet
/* * Collection * * List * 有序(存储顺序和取出顺序一致),可以重复 * * Set * 无序(存储顺序和取出顺序不一致),唯一 * * */ import java.uti ...
- nginx windows安装基础
nginx在 window上运行需要1.17.3以上. 官方文件https://nginx.org/en/docs/windows.html nginx启动: 1:进入安装目录,双击nginx.exe ...
- javascript自定义Map对象
javascript定义map对象开发前端组件的重要性就不过多阐述了,直接参考以下案例即可 <script type=text/javascript charset=utf-8> func ...
- MongoDB 基本操作(增改删)
1.插入数据 和关系型数据库一样,增加数据记录可以使用insert语句,这是很简单的. 当插入数据时,如果此集合不存在,则MongoDB系统会自动创建一个集合,即不需要刻意预先创建集合 每次插入数据时 ...
- 厉害了,Apache架构师们遵循的 30 条设计原则
作者:Srinath 翻译:贺卓凡,来源:公众号ImportSource Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或 ...
- Hibernate Validation与Spring整合各注解的用法Demo
转自:https://www.aliyun.com/jiaocheng/1315650.html <dependency> <groupId>org.hibernate< ...
- tenorflow 模型调优
# Create the Timeline object, and write it to a json from tensorflow.python.client import timeline t ...
- 利用sql语句建立全国省市区三级数据库
一.创建数据库zone CREATE DATABASE IF ONT EXISTS zone; 二.建立省级表并增加数据 DROP TABLE IF EXISTS `provinces`; CREAT ...