zoukankan      html  css  js  c++  java
  • 巨蟒python全栈开发-第6天 is&==

    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'xe6x88x91xe4xbbx8axe5xa4xa9xe9x9dx9exe5xb8xb8xe7x9ax84xe5x9bxb0'

    bs=s.encode('gbk') #把字符串转化成utf-8格式bytes
    print(bs)
    #b'xcexd2xbdxf1xccxecxb7xc7xb3xa3xb5xc4xc0xa7'

    #utf-8和gbk是不能直接转换的,必须使用unicode来转换
    '''

    (2)
    '''
    bs=b'xcexd2xbdxf1xccxecxb7xc7xb3xa3xb5xc4xc0xa7'
    s=bs.decode('gbk')
    print(s)

    sb = b'xe6x88x91xe4xbbx8axe5xa4xa9xe9x9dx9exe5xb8xb8xe7x9ax84xe5x9bxb0'
    s=sb.decode('utf-8')
    print(s)
    #爬虫中,在网站上,有的用的是GBK,有的就是utf-8
    '''

    #练习
    '''
    sb = b'xe6x88x91xe4xbbx8axe5xa4xa9xe9x9dx9exe5xb8xb8xe7x9ax84xe5x9bxb0'
    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)



  • 相关阅读:
    C++ Sqlite3的基本使用
    DirectX11 初探XMVECOTR&XMMATRIX
    lib和dll文件的初了解
    游戏设计模式——C++单例类
    C++11智能指针的深度理解
    你的文章里为什么不放源码Github链接了
    堡垒机的核心武器:WebSSH录像实现
    Asciinema文章勘误及Web端使用介绍
    Asciinema:你的所有操作都将被录制
    Django实现WebSSH操作物理机或虚拟机
  • 原文地址:https://www.cnblogs.com/studybrother/p/10060489.html
Copyright © 2011-2022 走看看