python3 id()、is 内存地址
id()、is 内存地址
1,id() 内存地址
2.== 比较的是值
3.is 比较的是内存地址
数字,字符串,有小数据池
int -5--256
str:1,不能有空格
2.长度不能超过20个字符
3.不能有特殊字符。
1.id() 内存地址
1 # id() 内存地址 2 s = 'alex' 3 print(s,type(s),id(s)) 4 # alex <class 'str'> 35619648 5 # alex <class 'str'> 32146240
2.== 比较的是值
3.is 比较的是内存地址
3.1列表、字典、元祖
1 # 列表、字典、元祖 2 l1 = [1,2,3] 3 l2 = [1,2,3] 4 print(l1 == l2) # True 5 print(id(l1),id(l2)) # 35680008 35679368 6 print(l1 is l2) #False
字符串、数字的特殊的。比较内存地址,pc看不出来,用cmd来查看s1 = 'alex '
3.2对于str 小数据池
范围
1.不能有空格。
2.长度不能超过20位。
3.不能有特殊字符。
cmd ---------》str
1 # 有空格指向的是False 2 >>> i = 'a' 3 >>> i1= 'a' 4 >>> print(i is i1) 5 True 6 7 >>> s1 = 'alex ' 8 >>> s2 = 'alex ' 9 >>> print(s1 == s2) 10 True 11 >>> print(s1 is s2) 12 False 13 14 >>> i = 'a b' 15 >>> i1= 'a b' 16 >>> print(i is i1) 17 False
字符串中单个*20以内他们的内存地址一样,单个字符*20以上内存地址不一样。
1 # 超过20位则为False 2 >>> i = 'a'*20 3 >>> j = 'a'*20 4 >>> print(i is j) 5 True 6 >>> i = 'a'*21 7 >>> j = 'a'*21 8 >>> print(i is j) 9 False
字符串中不能包含特殊符号如:+,- @,* /
1 # 有特殊字符也为False 2 >>> i = 'a@' 3 >>> j = 'a@' 4 >>> print(i is j) 5 False
3.3对于int 小数据池
范围:
-5---256 创建的相同的数字,都指向同一个内存地址。-5/256都包含
1 >>> i = 6 2 >>> i1= 6 3 >>> print(i is i1) 4 True 5 >>> i = 258 6 >>> i1= 258 7 >>> print(i is i1) 8 False 9 >>> i = -5 10 >>> i1= -5 11 >>> print(i is i1) 12 True
4.编码与解码
py3:
str: 表现形式: s = 'alex' 实际编码方式:unicode
bytes: 表现形式: s = b'alex' 实际编码方式:utf-8,gbk,gb2312....
unicode : 所有字符(无论英文,中文等) 1个字符=4个字节
gbk : 一个字符,英文1个字节。中文两个字节。
utf-8 : 英文1个字节。欧洲:2个字节。亚洲:3个字节。
py3:
unicode A :00000000 00000000 00000000 00001001 四个字节
中 :00000000 00001000 00000000 00000001 四个字节
utf-8 A :00000001 一个字节
欧洲@ : 00000010 00000001 两个字节
亚洲 '中' : 00001000 00000000 00000001 三个字节
'中国':00001000 00000000 00000001 00001001 00000000 00000001
gbk A :00001001 1个字节
中 :00000000 00100001 两个字节
不同的编码之间是不能相互识别,会产生乱码。
存储,传输的:utf-8,或者 gbk,或者是gb2312,或者是其他(绝对不是unicode)。
1 s1 = '晓晓' 2 b11 = s1.encode('utf-8') 3 print(b11) # b'\xe6\x99\x93\xe6\xa2\x85' 6个字节 4 s2 = '晓晓' 5 b22 = s2.encode('gbk') 6 print(b22) # b'\xcf\xfe\xc3\xb7' 4个字节