.user_profile{ display:block}

is和==的区别、编码补充

is和==的区别

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

is 比较的是内存地址  ==比较的是值

s = 'abc_'
s2 = 'abc_'
print(id(s),id(s2)) # 4327204768 4327204768
print(s is s2) #True
print(s == s2) #True

对于int和str中的部分,两个变量如果值相同,指向也是相同的,原理如下:

小数据池(常量池):把我们使用过的值存储在小数据池中,供其他的变量使用

小数据池给数字和字符串使用,其他类型不存在。

对于数字:

  -5~256是会被加到小数据池中的,每次使用的都是同一个对象。

对于字符串:

  1、如果是纯文字信息和下划线,那么这个对象会被添加到小数据池

  2、如果是带有特殊字符的,那么不会被添加到小数据池,每次都是新的

  3、如果是单一字母*n的情况,在20个单位内是可以的,超过20个单位就不会添加到小数据池中。

注意(一般情况下):

  在py文件中,如果你只是单纯的定义一个字符串,那么一般情况下都是会被追加到小数据池中的。

  我们可以这样认为,在使用字符串的时候,Python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多内存。

二、编码 

Python3中:内存中使用的是Unicode

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

  2、GBK:中文国标码,里面包含了ASCII编码和中文常用编码。 16bit  2byte

  3、Unicode:万国码,里面包含了全世界所有国家文字的编码 32bit  4byte

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

    1、英文:8bit  1byte

    2、欧洲文字:16bit  2byte

    3、中文:24bit 3byte

  在Python3的内存中,在程序运行阶段,使用的是Unicode编码,因为Unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于Unicode比较浪费空间和资源,需要把Unicode转存成utf-8或者GBK进行存储。

  在Python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是byte类型的数据,还是原来的数据,只是通过编码之后表现形式发生了改变而已。

s = '新'
print(s.encode('GBK')) # b'\xd0\xc2'
print(s.encode('utf-8')) # b'\xe6\x96\xb0'

s1='a'
print(s1.encode('GBK')) # b'a'
print(s1.encode("utf-8"))# b'a'

 英文编码之后的结果和源字符串一致。

中文编码之后的结果根据编码的不同,编码结果也不同。

一个中文的UFT-8编码是3个字节,一个GBK的中文编码是2个字节。

 

posted @ 2018-06-06 15:17  软萌团子  阅读(223)  评论(0编辑  收藏  举报