一,id、is、==讲解
==:判断左右两边的数值是否相同
id:内存地址(虚拟,非真)
is:比较左右两边的内存地址是否相同
*** 内存地址相同,值一定相等;值相等,内存地址不一定相等
x = 100 y = 100 print(id(x)) print(id(y)) print(x is y)
二,代码块以及缓存机制
一个文件、函数、类都是一个代码块,交互命令中一行就是一个代码块
由于在一个代码块中,可能会存在内容相同的对象(变量),系统如果每次都在内存中开创新的内存地址太浪费,因此诞生了缓存机制
缓存机制针对的对象:int、str(大部分)、bool、空元组
缓存机制(作用):
1,节省内存空间
2,提升性能
缓存机制分类:
1,驻留机制:同一个代码块中
2,小数据池:不同的代码块中
三,基础数据类型补充
1,各个数据类型之间的转化(int str bool list tuple dic set)
1,int<---->str(数字与字符串之间的相互转化)
转化int为str类型:用str数据类型把数字“包起来”
x = 1
print(str(x))
转化str为int类型:用int数据类型把字符串“包起来”【仅限字符串本身就是数字,非数字不可以转化】
x = '123' print(int(x))
2,bool可以与所有数据类型转化(所有为空的数据类型转化为bool都是False,反之则为true)
# 0 ‘’ [] {} () None ------>False
lis = [] print(bool(lis)) # 显示结果为False
3,str<--->list
# 字符串转化为列表的方法是:通过split分割
x = '123 abc 啦啦啦' lis = x.split(" ") print(lis)
# 列表转化为字符串的方法是:通过join拼接【如果列表中存在数字是不可以拼接的】
lis=['abc','123','台标'] x =' '.join(lis) print(x)
4,str<--->tuple
# 字符串转化为元组的方法是:partition
# partition:通过指定分隔符,把字符串中分隔符之前的部分,分隔符本身,以及之后的部分变成元组中的内容。如果分隔符不存在,返回整个字符串以及新增两个空字符
x = '123 abc 哈哈' tu1 = x.partition('分隔符') print(tu1)
# 元组转化为字符串的方法是:join【元组中不能存在数字】
tu1 = ('123','abc','阿斯弗') x = ' '.join(tu1) print(x)
5,list<--->tuple
# 直接转化即可(想转化为什么就用什么数据类型把变量“包起来”)
tu1 = ('123','abc','阿斯弗') print(list(tu1)) lis = ['123', 'abc', '阿斯弗'] print(tuple(lis))
6,dict--->list【注意这里是单项转化】
# 直接转化即可(用list把字典的变量名“包起来”)
dic = {'name':'Bob', 'age':18, 'hobby':'travel' } print(list(dic))
2,元组的补充说明:如果元组中只有单个元素,并且没有“,”分割,那么他的数据类型为元素本身的数据类型
tu1 = (1234) tu2 = ('qwe') print(type(tu1)) # 显示为数字类型 print(type(tu2)) # 显示为字符串类型
3,字典的补充方法(fromkeys)
# fromkeys可以为多个“键”设置值(值是不可变的)
dic = dict.fromkeys(['name','age','hobby'],'太白') print(dic)
# 这里存在一个问题,就是附加的值必须是不可变类型,因为通过这个方法设定的值在内存中的地址是同一个
dic = dict.fromkeys(['name','age','hobby'],[]) dic['name'] = 'Box' dic['age'] = 23 dic['hobby'] = 'travel' print(dic) # 发现三个key对应的值都是最后一次赋予的值