python之is 和 == 的区别//编码和解码

Posted 卍风衍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之is 和 == 的区别//编码和解码相关的知识,希望对你有一定的参考价值。

一.is  和  ==  的区别:

==   比较    #比较两边的值

is    比较   #比较的是内存地址   

id()是python的一个内置函数,通过id()我们可以查到一个变量表的值在内存中的地址

(只限于数字和字符串是True)

 

#数字小数据池 :    -5~256

1.字符串中如果有特殊字符,那么不会添加到小数池中,他们的内存地址就不一样

字符串中单个*20以内他们的内存一样,超过20个就不会添加到小数据池;单个*以上内存地址就不一样

 

注意:pycharm是个坑,一个py文件中所有相同的字符串,一般都是使用一样的内存地址

在py文件中,如果你只是单纯的定义一个字符串,那么一般情况下都会被添到小数据池中,我们可以这样认为:在使用字符串的时候,python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多内存。

s = 2
print(id(s)) # 1514368064
s = 2
print(id(s)) # 1514368064
s = alex
print(id(s)) # 43156680
s = "alex"
print(id(s)) # 43156680
lst = [1, 2, 4]
print(id(lst)) # 43164168
lst1 = [1, 2, 4]
print(id(lst1)) # 41362568
tup = (1, 2)
tup1 = (1, 2)
print(id(tup)) #39978312
print(id(tup1)) #39978376

 


# 我们发现,数字和字符串的数据地址是一样的. 列表和元组的数据地址是不一样的

.

二.编码和解码

encoude(编码方式)    -----拿到明文编码后对应的字节t

decode(编码方式)      -----将编码后的字节解码成对应的明文

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

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

编码回顾;

1.ASCII : 最早的编码,里面有英文大写字母,小写字母,数字,一些特殊字符,没有中文.

              8 个bit(8位),1个 byte.

2.GBK : 中文国标码,里面包含了ASCII编码,1

    6个bit,2个byte

3.unicode : 万国码,里面包含了全世界所有国家的文字编码

    32个bit,4个byte,包含了ASCII

4.utf-8 : 可变长度的万国码,是Unicode的一种实现,最小字符占8位

         英文:8bit  1byte

    欧洲文字:16bit  2byte

    中文:24bit  3byte

综上,除了ASCII码以外,其他信息不能直接转换。

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

bytes 的表现形式:

  1,英文 b‘alex‘,英文的表现形式和字符串没什么两样;

  2,中文b‘xe4xb8xad‘,这是一个汉字的UTF-8的bytes表现形式;

    # 编码:
    s = "alex"
    print(s.encode("utf-8")) # 将字符串编码成UTF-8,结果为:b‘alex‘
    print(s.encode("GBK")) # 将字符串编码成GBK,结果为:b‘alex‘

    s = ""
    print(s.encode("UTF-8"))
    print(s.encode("GBK"))
    s1 =  s.encode("UTF-8") # 中文编码成UTF-8,结果为:b‘xe4xb8xad‘
    s2 = s.encode("GBK") # 中文编码成GBK,结果为:b‘xd6xd0‘

    # 解码:
    print(s1.decode("UTF-8"))  #结果为:中
    print(s2.decode("GBK"))   #结果为:中
复制代码

  注意:用什么进行编码就要什么进行解码。

  记住:英文编码之后的结果是原字符串一致,中文编码之后的结果根据编码的不同,编码结果也不同,我们能肯定,一个中文UTF-8是3个字节。一个GBK的中文编码是2个字节。

 


以上是关于python之is 和 == 的区别//编码和解码的主要内容,如果未能解决你的问题,请参考以下文章

is 和“==” 的区别,编码和解码

博客目录

python的 == 和 is,编码和解码

Python 编码

'is' '==' 编码,解码

is == 编码与解码