【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode

时间:2022-01-10 13:20:04

is比较的是id(内存地址)是不是一样,==比较的是值是不是一样

Python中,万物皆对象!万物皆对象!万物皆对象!(很重要,重复3遍)

每个对象包含3个属性,id,type,value

id就是对象地址,可以通过内置函数id()查看对象引用的地址。

type就是对象类型,可以通过内置函数type()查看对象的类型。

value就是对象的值。

老师给你举个例子:

a = 1
b = a
c = 1
d = 1.0

这里有3个对象abc,类型都是int。值都是1。

id(a)   # 35556792L
id(b)   # 35556792L
id(c)   # 35556792L
id(d)   # 21253459L

本例中,毫无疑问,3兄弟abc都是引用的同一个地址35556792L下的内容。

当你想判断a is b的时候,实际上比较的是id(a)==id(b)。结果为True。

当你写成a==b时候,实际上比较的是id(a)这个地址指向的值是不是和id(b)这个地址指向值一样。结果为True。

同理,如果你写的是a is d,那么结果就是False。

而此时,a==d,结果却是True,因为值是一样的。(其实还会涉及到type的比较,此处忽略)

引申内容:

所以大多数情况下当用is和==的结果是一样时,用is的效率是会高于==的效率。

encode()  编码. 获取到的是编码之后的结果. bytes

decode()  解码. 把bytes编程我们熟悉的字符串

encode/decode:编码/解码,如下左图,各个编码之间是不能直接转换的,计算机内存中默认存储的编码格式是unicode,所以当我们需要将编码在utf8和gbk之间转换的时候,都需要和unicode做操作。

我的终端编码是gbk编码的,当我创建一个string = '景'时,string就被存储成gbk格式。此时我想把gbk格式转换成utf8格式,就要先将原gbk格式的string转换成unicode格式,然后再将unicode转换成utf8格式。如下右图,老师说,把这个字整乱码了我们的目的就达到了,哈~


【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode



【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode

【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode