1.小数据池
2.数据类型的坑
1.小数据池
1.1 id和is的区别:
id():获得数据的内存地址(python中的内存地址不是内存中的那个) is:比较数据是不是相同的内存地址 == :比较两边数据是否相等 注:内存地址相同:值一定相等,内存地址不同:值不一定相等
#整型数据只有-5至256的数据跨代码块,内存地址相同
1.2 代码块
1. python一个模块,一个函数,一个类,一个文件等都是一个代码块。
2.交互方式的python每条语句都是一个代码块
1.3 代码块的缓存机制
好处:
1.节省了内存空间
2.提高了效率(不用重复的为小数据开辟空间删除数据)
缓存机制的适用范围:
int,bool,str(几乎所有符合),()空元祖
str不符合缓存机制的地方:
a = 'asdf' * 5 b = 'asdf' * 5 print(a is b) # True a = 'asdf' * 6 b = 'asdf' * 6 print(a is b) # False :相乘字符串大于20长度的字符串
1.4小数据池
小整数缓存机制,又称驻留机制。
小数据池是针对不同代码块之间的缓存机制。
范围:
int:-5至256
str:一定范围和代码块的范围好像一样
好处:
和代码块相同。
2.数据类型的坑
2.1删除列表元素的坑
注:循环列表时候,不要改变列表大小,否则会影响结果。
倒序删除法: #解决删除对循环列表的影响
l1 = [11, 22, 33, 44, 55] index = len(l1) - 1 while index >= 0: if index % 2 == 1: del l1[index] index -= 1 print(l1)
2.2删除字典key的坑
注:循环字典时候,不能改变字典的大小,会报错。
#RuntimeError: dictionary changed size during iteration
解决方式: #把要删除的key存放到一个列表中,循环该列表进行字典的删除操作
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'} temp = [] for i in dic: if 'k' in i: temp.append(i) #把要删除的key添加到一个临时的列表中 print(temp) for i in temp: #循环该列表去删除字典内容 dic.pop(i) print(dic)
2.3字典方法fromkeys的坑
遍历添加key时候,如果值为空列表,所有key共用一个列表。
dic = {} dic = dic.fromkeys('abc',[]) print(dic) dic['a'].append('aaa') dic['b'].append('bbb') print(dic) """ {'a': [], 'b': [], 'c': []} {'a': ['aaa', 'bbb'], 'b': ['aaa', 'bbb'], 'c': ['aaa', 'bbb']} """