zoukankan      html  css  js  c++  java
  • is 和 == 区别@编码

    一. is和==的区别

    1. id()        通过id()我们可以查看到一个变量量表示的值在内存中的地址.

    s="我喜欢打台球"
    s1="我喜欢打台球"
    a=id(s)
    b=id(s1)
    print(a)
    print(b)
    1995348171440
    1995348171440
    s=["篮球","足球","乒乓球"]
    a=id(s)
    print(a)
    s1=["篮球","足球","乒乓球"]
    b=id(s1)
    print(b)
    1442066555464
    1442066555528


     我们发现. 字符串的数据地址是⼀样的. ⽽列表的数据地址是不⼀样的.
    
    dic1 = {"a": "b", "c":"d"}
    print(id(dic), id(dic1))
    2146946423112 2146946423184
    tu = ("詹姆斯", "科比")
    tu1 = ("詹姆斯", "科比")
    print(id(tu), id(tu1))
    
    2621161007496 2621161007496
    # a = 10
    # b = 10
    # print(id(a), id(b))
    140718126519616 140718126519616
    
    # 布尔也有,
    # a = True
    # b = True
    # print(id(a), id(b))
    140718125988176 140718125988176

    结果一致, 但是在终端中是不一致的. 所以在python中,命令⾏代码和py文 件中的代码运行的效果可能是不一样的

    小数据池(常量量池): 把我们使用过的值存储在小数据池中.供其他的变量量使用. 小数据池给数字和字符串串使用, 其他数据类型不存在. 对于数字: -5~256是会被加到小数据池中的. 每次使用都是同一个对象. 对于字符串: 1. 如果是纯文字信息和下划线. 那么这个对象会被添加到小数据池 2. 如果是带有特殊字符的. 那么不会被添加到小数据池. 每次都是新的 3. 如果是单一字母*n的情况. 'a'*20, 在20个单位内是可以的. 超过20个单位就不会添加 到小数据池中
    注意(一般情况下): 在py文件中. 如果你只是单纯的定义一个字符串. 那么一般情况下都是会被添加到小数据池中的. 我们可以这样认为: 在使用字符串的时候, python会帮我们把字符串进行缓存, 在下次使用的时候直接指向这个字符串即可. 可以节省很多内存.

     

     由于id是帮我们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址. 最终我们通过is可以查看两个变量使用的是否是同一个对象.

    ==  双等表示的是判断是否相等, 注意. 这个双等比较的是具体的值.而不是内存地址

    lst = ["姚明", "易建联"]
    lst2 = ["姚明", "易建联"]
    print(lst == lst2)  # True
    print(lst is lst2)  # False
    s2 = "alex"
    print(s == s2) # True
    print(s is s2)  # True

    总结:     is 比较的是地址    == 比较的是值

    二. 编码的补充

    字符串在传输时转化成bytes=> encode(字符集)来完成

    s = "饿了么" bs = s.encode("GBK") print(bs) b'xb6xf6xc1xcbxc3xb4' GBK 一个中文:2个字节
    s = ""
    print(s.encode("utf-8"))
    print(s.encode("GBK"))
    
    b'xe4xb8xad'
    b'xd6xd0'
    # GBK => utf-8
    bs = b'xb6xf6xc1xcbxc3xb4'
    # 先解码成unicode字符串
    s = bs.decode("GBK")
    print(s)
    "饿了吗"
    # 在把字符串编码成UTF-8
    bss = s.encode("UTF-8")
    print(bss)
    b'xe9xa5xbfxe4xbax86xe4xb9x88'

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

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

    综上, 除了了ASCII码以外, 其他信息不能直接转换. 在python3的内存中. 在程序运行阶段. 使用的是unicode编码. 因为unicode是万国码. 什么内容都可以进行显示. 那么在数据传输和存储的时候由于unicode比较浪费空间和资源. 需要把 unicode转存成UTF-8或者GBK进⾏存储. 怎么转换呢. 在python中可以把文字信息进行编码. 编码之后的内容就可以进行传输了. 编码之后的数据是bytes类型的数据.其实啊. 还是原来的 数据只是经过编码之后表现形式发生了改变而已.

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

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

  • 相关阅读:
    pip遇见的format问题
    opencv配置
    WPF学习笔记2
    WPF笔记1 用VS2015创建WPF程序
    C#基础知识
    电脑中毒了。
    感觉又学到了不少,在这里写下来,但也有一个问题,不知道是为甚吗?
    通过对HTML有一定的了解后,现在我开始学HTML DOM了。
    此情可待成追忆,只是当时已惘然。
    常用PS快捷键
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9284038.html
Copyright © 2011-2022 走看看