6.小数据池,编码转换.

=:赋值
==:数值比较
is:地址比较

一、小数据池:

(一)、数字:-6~256

>>> a = 100
>>> b = 100
>>> print(a is b)
True
>>> print(id(a),id(b))
1348631104 1348631104
>>>

>>> a = 260
>>> b = 260
>>> print(a is b)
False
>>> print(id(a),id(b))
30057584 30060272

(二)、字符串
1,不能有特殊字符。
2,s20 还是同一个地址,s21以后都是两个地址。

>>> s1 = 'china'
>>> s2 = 'china'
>>> print(s1 is s2)
True
>>> print(id(s1),id(s2))
43230576 43230576
>>> s1 = 'china@'
>>> s2 = 'china@'
>>> print(s1 is s2)
False
>>> print(id(s1),id(s2))
43232424 43230520
>>>
相同的字符21个之内是同一个地址,超过21个就是不一样的地址
>>> s1 = 'a'*20
>>> s2 = 'a'*20
>>> print(s1 is s2)
True
>>> print(id(s1),id(s2))
43226576 43226576
>>>
>>> s1 = 'a'*21
>>> s2 = 'a'*21
>>> print(s1 is s2)
False
>>> print(id(s1),id(s2))
43228232 43246336
不同的字符,不管多少个都是true
>>> s1 = 'qawsedrftgyhujikolpz'
>>> s2 = 'qawsedrftgyhujikolpz'
>>> print(s1 is s2)
True
>>> print(id(s1),id(s2))
43226576 43226576
>>>
类似下面的,也是都是TRUE
>>> s1 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
>>> s2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
>>> print(s1 is s2)
True
>>> print(id(s1),id(s2))
34597672 34597672

list,tuple,dict,set等没有小数据池

二、 编码转换

ascii
        A    00000010   8位    1字节

unicode
        A    00000000 00000010 00000100 00001000  32位   4字节
        中   00000000 00000001 00000010 00000110   32位  4字节

utf-8
        A    00000010   8位    1字节
        中   00000000 00000001 00000010   24位  3字节

GBK
        A    00000010   8位    1字节
        中   00000000 00000001   16位   2字节

GB2312....

1:各个编码之间的二进制是不能相互识别的,会产生乱码。
2:文件的存储,传输,不能用unicode,因为体积太大,只能用(ascii,utf-8,utf-16,gb2312,gbk等)

python3:

    str:在内存中主要是unicode编码。
    bytes类型:在存储和传输的时候,主要编码方式是utf-8,gbk,gb2312,ascii.....
    
    bytes类型:
    
    对于英文:
            str:    表现形式:s='china'
                    编码形式:00100010   unicode
            bytes:  表现形式:s=b'china'
                     编码形式:000101010  utf-8,gbk...
    对于中文:
            str:    表现形式:s='中国'
                     编码方式: 010101010  unicode
            bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
                    编码方式: 000101010  utf-8 gbk。。。。
            
bytes类型
str在内存里使用unicode,存储和传输使用utf,gbk....

s1 = 'china'
s2 = b'china'
print(s1,type(s1))
print(s2,type(s2))

s1 = '中国'
s2 = b'中国'
print(s1,type(s1))
print(s2,type(s2))   #s2报错

s1 = 'china'
s2 = s1.encode('utf-8')   # encode  编码:str---->bytes
print(s2)

结果:b'china'

s1 = '中国'
s2 = s1.encode('utf-8')
print(s2)
utf-8结果:b'\xe4\xb8\xad\xe5\x9b\xbd'      从两个汉字六个字节可以判断是utf-8
gbk结果:  b'\xd6\xd0\xb9\xfa'                       从两个汉字共四个字节可以判断是GBK

posted @ 2018-12-11 23:50  SI2021  阅读(104)  评论(0)    收藏  举报