zoukankan      html  css  js  c++  java
  • 小数据池 is 和 == ,以及再谈编码

    一、小数据池

      1.id()

      小数据池针对的是:int ,str,boo(都是不可变的数据类型)

      (1)如果是在py文件中写的字符串,几乎都是缓存的

      (2)在黑窗口里写的机会都不会缓存

      (3)不同的解释器,缓存的机制也不一样

        优点:

           可以帮我们快速的创建对象,节省内存

        缺点:
           缓存如果过大,反应速度会比较慢

      在py文件中几乎所有的字符串都会缓存,id()查看变量的内存地址

    s = "alex"
    print(id(s))
    

      

      2. is 和 ==

       ==判断左右两端的值是否相等,不不是一致。

       is判断左右两端内容的内存地址是否一致,如果返回True,哪可以确定这两个变量使用的是同一个对象

     lst1 = [1,2,3]
    lst2 = [1,2,3]
    # # 列表没有小数据池
    print(id(lst1), id(lst2)) #  166167560 166126408
    print(lst1 == lst2) # True
    print(lst1 is lst2) # False
    #
    s1 = "我叫周润发"
    s2 = "我叫周润发"
    print(s1 == s2)
    print(s1 is s2) # 小数据池
    
    tu1 = ("周一", "周二")
    tu2 = ("周一", "周二")
    print(tu1 is tu2) # 地址不相等 False
    print(tu1 == tu2) # 内容相等 True
    
    # == 比较的是内容
    # is 比较内存地址
    

    二、编码的补充

      1.python2中默认的使用的是ASCII码,所以不支持中文,如果需要在python2中更改编码需要在文件的开始编写:

    # -*- encoding:utf-8 -*-
    

      2.python3中:内存中使用的是Unicode码。

      编码回顾:

        1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂,
        8个01代码, 8个bit, 1个byte
        2. GBK: 中⽂国标码, ⾥⾯包含了ASCII编码和中⽂常⽤编码. 16个bit, 2个byte
        3. UNICODE: 万国码, ⾥⾯包含了全世界所有国家⽂字的编码. 32个bit, 4个byte, 包含了
        ASCII
        4. UTF-8: 可变⻓度

       bytes的表现形式:

       1. 英⽂ b'alex' 英⽂的表现形式和字符串没什么两样

       2. 中⽂ b'xe4xb8xad' 这是⼀个汉字的UTF-8的bytes表现形式

      编码:

        encode(utf-8/gbk):编码,把字符串转化成utf-8/gbk格式bytes

        decode(utf-8/gbk):解码,把bytes解码成字符串

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

    s = "我今天非常的困" # 21个utf-8
    bs = s.encode("gbk") # 把字符串转化成utf-8格式bytes
    # # bytes不是给人看的. 给机器用的
    # # 14个字节   gbk
    b'xcexd2xbdxf1xccxecxb7xc7xb3xa3xb5xc4xc0xa7'
    # # 21个字节   utf-8
    # # b'xe6x88x91xe4xbbx8axe5xa4xa9xe9x9dx9exe5xb8xb8xe7x9ax84xe5x9bxb0'
    print(bs)
    

      

        把字节转化回字符串

    bs = b'xe6x88x91xe4xbbx8axe5xa4xa9xe9x9dx9exe5xb8xb8xe7x9ax84xe5x9bxb0'
    s = bs.decode("utf-8")
    print(s)
    

        

        关于bytes, 非ascii中的内容. 展示的时候都是x.. 如果是ascii中的内容. 原样输出

          

    name = "alex昨天吃多了"
    bs = name.encode("gbk") # b'alexxd7xf2xccxecxb3xd4xb6xe0xc1xcb'
    print(bs)
    
    bss = name.encode("utf-8") # b'alexxe6x98xa8xe5xa4xa9xe5x90x83xe5xa4x9axe4xbax86'
    print(bss)
    

      

        

       

  • 相关阅读:
    tfs中如何创建团队项目及如何操作团队项目
    Qt出现常量有换行符的错误的解决方法
    .net程序在无.net环境下运行
    无法定位程序输入点__gxx_personality_v0的一个解决方法
    SQL Server2012中的SequenceNumber
    GDB十分钟教程
    使用vscode对c进行调试
    sqlserver 操作xml
    使用HttpOnly提升Cookie安全性
    SQL localdb 连接字符串
  • 原文地址:https://www.cnblogs.com/guchenxu/p/10061245.html
Copyright © 2011-2022 走看看