小数据池
s = 'alex'
print(id(s)) # 获取内存地址
# == 判断两个对象的值相同.
# i = 100
# i1 = 100
# print(i == i1)
# is 身份运算:判断的是两个对象的内存地址是否相同.
# i1 = 10
# i2 = 10
# print(i1 is i2)
# 代码块
# i = 1
# i2 = 3
# i3 = 4
# 一个文件是一个代码块.(函数,类都是一个代码块.)
# 交互命令中一行就是一个代码块.
# 同一个代码块:同一代码块的缓存机制,驻留机制.
#
i1 = 100
i2 = 300
i3 = 100
l1 = [1,2,3]
l2 = [1,2,3]
# print(l1 is l2)
# tu1 = (1,2,)
# tu2 = (1,2,)
#
# print(tu1 is tu2)
# 同一个代码块驻留机制的目的:
'''
1,节省内存空间.
2,提升性能.
'''
# 驻留机制针对的对象: int bool str ()空元组.
# int: 范围 任意数字
# i1 = 1212312312312312312312312
# i2 = 1212312312312312312312312
# print(i1 is i2)
# bool True Fasle
# str:几乎所有的字符串都会符合缓存机制,
# s1 = 'fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$'
# s2 = 'fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$'
# print(s1 is s2)
# 通过相乘的形式构建的字符串长度不能超过20满足同一代码块的驻留机制.
# s1 = 'old_' * 5
# s2 = 'old_' * 5
# print(s1 is s2) # True
# 不同的代码块之间: 小数据池.
# 小数据池是针对 不同代码块 之间的缓存机制!!!
# 小数据池的目的:
'''
1,节省内存空间.
2,提升性能.
'''
# 小数据池针对的对象: int bool str ()空元组.
# int: -5 ~256
# str: 一定规则的字符串
# 总结
'''
如果在同一代码块下,则采用同一代码块下的换缓存机制。
如果是不同代码块,则采用小数据池的驻留机制。
'''
i1 = 1000
i2 = 1000
print(i1 is i2)
数据类型之间的转换
# int bool str list tuple dict set
'''int bool str 三者转化是可以的.'''
# bool 可以与所有的数据类型进行转换.
# 所有为空的数据类型转化成bool都为Fasle.
# 0 '' [] () {} None ----> Fasle
# print(bool([])) # False
# str ---> list split 分割
# list ---> str join # list里面的元素全部都是str类型
# l1 = ['武sir', 'alex', '太白']
# print(' '.join(l1))
# str ----> tuple # partition
# tuple ---> str join
# tu1 = ('武sir', 'alex', '太白')
# ret = ' '.join(tu1)
# print(ret,type(ret))
# list<----->tuple
# l1 = ['武sir', 'alex', '太白']
# print(tuple(l1))
# tu1 = ('武sir', 'alex', '太白')
# print(list(tu1))
# dict ----> list
# dic = {'name':'alex','age': 73}
# print(list(dic))
# set list 转化 下午讲.
# tuple: 如果元组中只有单个元素并且没有 , 则类型是元素本身的类型.
# tu1 = (1)
# tu1 = ('alex',)
# print(tu1,type(tu1))
# dict
# dic = {'name':'alex','age': 73}
# dic['money'] = '10万'
# print(dic)
# dic = dict.fromkeys([1,2,3],'太白')
# dic = dict.fromkeys('abcd','太白')
# dic = dict.fromkeys('abcd',[1,])
# 坑: 如果你的值是一个可变的数据类型, 他在内存中是一个.id相同.
# dic = dict.fromkeys('abcd',[])
# dic['a'].append(666)
# dic['b'].append(111)
# dic['c'].append(222)
# print(dic)
# l1 = [1,2,3]
# l2 = l1
# l3 = l2
# l1.append(666)
# l2.append(111)
# print(l1)
l1 = [11, 22, 33, 44, 55]
# 将此列表索引为奇数位对应的元素全部删除.
# 方法一:
# del l1[1::2]
# print(l1)
# 方法二:错误示例:
# 循环一个列表时,不要改变列表的大小.这样会影响你最后的结果.
# for index in range(len(l1)):
# if index % 2 == 1:
# # index 奇数
# l1.pop(index)
# print(l1)
# 方法三
# new_l = []
# for index in range(len(l1)):
# if index % 2 == 0:
# new_l.append(l1[index])
# # print(new_l)
# l1 = new_l
# print(l1)
# 方法三:
# for index in range(len(l1)-1,-1,-1):
# if index % 2 == 1:
# l1.pop(index)
# print(l1)
# 循环一个列表时,最好不要对原列表有改变大小的操作,这样会影响你的最终结果.
#
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
# 将字典中的key中含有k元素的所有键值对删除.
# dictionary changed size during iteration
# for key in dic:
# if 'k' in key:
# dic.pop(key)
# print(dic)
# l1 = []
# for key in dic:
# if 'k' in key:
# l1.append(key)
# # print(l1)
# for key in l1:
# dic.pop(key)
# print(dic)
# 循环一个字典时,不能改变字典的大小,这样会报错.