1.小数据池
2.id
3.decode和encode
小数据池
#小数据池:不要死磕就行
#python为了简化,搞出来的一个东西
ID
(1)
# id()函数可以帮我们查看一个变量的内存地址
# a=10
# b=30
# c=10
# print(id(a)) #1712876864
# print(id(b)) #1712877504
# print(id(c)) #1712876864
(2)
# lst=['周杰伦','麻花藤']
# print(id(lst)) #1248606696968
# lst.append('胡辣汤')
# print(id(lst)) #1248606696968
#你哥还是你哥,你的包还是你的包
#在这个过程中,始终还是那个那个包
(3)
# lst=['周杰伦','麻花藤']
# print(id(lst)) #2415882876424
# lst=[] #重新定义一个列表
# lst.append('胡辣汤')
# print(id(lst)) #2415882876296
#
(4)#两个对象的内存地址是不一样的
'''
lst1=[1,2,3]
lst2=[1,2,3]
print(id(lst1)) #1845106652680
print(id(lst2)) #1845106652552
'''
(5)#python&java等等最慢的事情是:创建对象 作用:显著提高程序的运行效率
#随着时间的提升,内存会不断被消耗
'''
s1='abc' #内存中是没有'abc,创建一个新的 0.001
s2='abc' #内存中已经有了'abc',直接把abc拿来用 0.00000001
print(id(s1),id(s2)) #1351674474712 1351674474712
'''
#程序中出现最高的数据类型:字符串,为了能够快速的创建字符串
#节省内存,把相同的规律的字符串进行缓存,当下次创建的时候就不再创建了
#把字符串的缓存 ->小数据池->String iterning ->常量池->字符串缓存
#其他语言:常量池,字符串缓存
#在创建字符串之前,先去小数据池对比,是否已经存在了该字符串,如果存在了.
#就不创建新的了,直接拿原来存在的数据,省略掉反复重复创建字符串的过程,节省内存
(6)#小数据池只针对:数字,字符串,布尔值
# 什么数据会被缓存?
#数字,字符串,布尔值=》 都是不可变的数据类型(因为他会被很多人使用)
#有缓存和驻留机制
#基本数据类型:int bool str list tuple dic set
1.#数字
'''
a=1000
b=1000
print(id(a),id(b)) #2811993566928 2811993566928
'''
#在CMD显示不一样 -5-256
#在pycharm是显示一样的
2.#字符串,如果单纯的写字符串,几乎都会被缓存
'''
s1='alex昨天上厕所没关门,韩红冲进去了,风扇个出来了,alex昨天上厕所没关门,韩红冲进去了,风扇个出来了'
s2='alex昨天上厕所没关门,韩红冲进去了,风扇个出来了,alex昨天上厕所没关门,韩红冲进去了,风扇个出来了'
print(id(s1),id(s2)) #2793562660912 2793562660912
'''
'''
如果在py文件中写的字符串,几乎都是缓存的
在黑窗口里写的几乎都不会缓存
#不同的解释器,缓存的机制也不一样
# 优点:可以帮助我们快速的创建对象,节省内存
# 缺点:缓存如果过大,响应速度会比较慢
#但是我们 "不要纠结"
'''
# ==和 is
'''
硬盘: 80MB/S(数据库)
内存: 缓冲的作用 2G/S
CPU: 3Ghz (应用)
#内存很满很满时,会直接找硬盘,也就是硬盘中的内存机制
#百万并发:90万人在等待
#中间机制:中间加上缓存,现在的就是缓存
#短期内不改的,就放在小数据池内,京东的页面
#每天缓存一份,但是价格不缓存
'''
(7)#==(判断内容)和 is(判断内存地址) 的区别
#== 比较的是数据,外貌
#is 比较的是内存地址,比较身份证号
'''
lst1=[1,2,3]
lst2=[1,2,3]
#列表没有小数据池
print(id(lst1),id(lst2)) #2231123785096 2231123785224#并且每次的运行结果都不一样
print(lst1==lst2) #True
print(lst1 is lst2) #False
s1='我叫周润发'
s2='我叫周润发'
print(s1==s2) #True
#print(s1 is s2) #True #小数据池
tu1=('周一','周二')
tu2=('周一','周二')
print(tu1 is tu2) #False 内存地址不相同
print(tu1 == tu2) #True 内容一样
'''
3.decode和encode
(1)
'''
s='我今天非常的困'
bs=s.encode('utf-8') #把字符串转化成utf-8格式bytes
print(bs)
#bytes不是给人看的,给机器用的
#21个字节
# b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
bs=s.encode('gbk') #把字符串转化成utf-8格式bytes
print(bs)
#b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
#utf-8和gbk是不能直接转换的,必须使用unicode来转换
'''
(2)
'''
bs=b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
s=bs.decode('gbk')
print(s)
sb = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
s=sb.decode('utf-8')
print(s)
#爬虫中,在网站上,有的用的是GBK,有的就是utf-8
'''
#练习
'''
sb = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
gb=sb.decode('utf-8') #解码
gbk_1=gb.encode('gbk') #编码
print(gbk_1)
'''
# 关于bytes,非ascii中的内容,展示的是\x..,如果是ascii中的内容,原样输出
# name='alex昨天吃多了'
# bs=name.encode('gbk')
# print(bs)
name='alex昨天吃多了'
bs=name.encode('GBK')
print(bs)