1、比较 赋值 is
= 赋值
== 比较值是否相等
is 比较的是内存地址
li1 = [1,2,3]
li2 = li1
print (id(li1),id(li2))
(9664704, 9664704)
数字,字符串 小数据池
数字的范围 -5–256
字符串:1、不能有特殊字符
2、s20是同一个地址,s21以后也都是两个地址
```python
i1 = 6
i2 = 6
print (id(i1),id(i2))
140723988820384 140723988820384
s1 = 'abc' * 20
s2 = 'abc' * 20
print (s1 is s2)
True
s1 = 'abc' * 210
s2 = 'abc' * 210
print (s1 is s2)
True
ss1 = 'ab#'
ss2 = 'ab#'
print (ss1 is ss2)
True
剩下的list、dict、tuple、set, 即便值相同,is是不相同
l1 =[1,]
l2 =[1,]
print (l1 is l2)
False
ll1 = {1:'2',1:'3',}
ll2 = {1:'2',1:'3',}
print (ll1 is ll2)
False
2、字符编码格式
ASCII
A:00000010 8位 一个字节
unicode
A:00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8
A: 00100000 8位 一个字节
中:00000001 00000010 00000110 24位 三个字节
gbk
A:00000110 8位 一个字节
中:00000010 00000110 16位 两个字节
1、各个编码之间的二进制,是不能互相识别的,会产生乱码
2、文件的存储,传输,不能是unicode(只能是UTF-8 utf-16 gbk gb2312 ascii等)
py3
对于英文
str在内存中使用unicode编码
表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes 编码方式utf-8 utf-16 gbk gb2312 (存储和传输)
表现形式: s = b'alex'
编码方式:000101010 utf-8 gbk。。。。。。
s = 'alex'
s1 = b'alex'
print (s,type(s))
print (s1,type(s1))
alex <class 'str'>
b'alex' <class 'bytes'>
对于中文:
str:表现形式:s = '中国'
编码方式:010101010 unicode
bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式:000101010 utf-8 gbk 。。。。。
str->bytes 编码的过程
错误的编码方式
s = '中国'
print (s,type(s))
s1 = b'中国'
print (s1,type(s1))
File "C:/python/diangotest/dic.py", line 136
s1 = b'中国'
^
SyntaxError: bytes can only contain ASCII literal characters.
s1 = 'alex'
s2 = '中国'
s22 = s2.encode('utf-8')
print (s22)
s22 = s2.encode('gbk')
print (s22)
b'\xe4\xb8\xad\xe5\x9b\xbd'
b'\xd6\xd0\xb9\xfa'