基础知识补充
列表的地for循环注意事项
lst = [1,2,3,4,5] for i in lst: lst.append(7) print(lst) #会无限循环
lst = [1,2,3,4,5] #循环i=1,lst=[2,3,4,5];i=3[] for i in lst: lst.remove(i) print(lst) #[2,4]
lst = [1,2,4,4,5,6,7,8] for i in range(len(lst)-1,-1,-1): lst.pop(i) print(lst)
深浅拷贝
import copy
copy()浅拷贝 只会拷贝第1层. 第2层的内容不会拷贝. 所以被称为浅拷贝。
copy.deepcopy()深拷贝 只会拷贝不变的内容,可变化的开辟新内存。
代码块
int(float):任何数字在同一代码块下都会复用。
bool:True和False在字典中会以1,0方式存在,并且复用。
str:几乎所有的字符串都会符合缓存机制,具体规定如下(了解即可!):
非乘法得到的字符串都满足代码块的缓存机制:
乘法得到的字符串分两种情况:
乘数小于等于1的时候,任何字符串满足代码块的缓存机制,乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,满足代码块的缓存机制:
优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘字典’中取出复用,避免频繁的创建和销毁,提升效率,节约内存。
小数据池
大前提:小数据池也是只针对 int(float),str,bool
小数据池是针对不同代码块之间的缓存机制!!!
-5~256的整数进行了缓存
字符串的长度为0或者1,默认都采用了驻留机制(小数据池)
字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。
用乘法得到的字符串,分两种情况。 乘数小于等于1时:仅含大小写字母,数字,下划线,默认驻留,含其他字符,长度<=1,默认驻留。3.2 乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,默认驻留。
指定驻留
from sys import intern a = intern('hello!@'*20) b = intern('hello!@'*20) print(a is b) #指定驻留是你可以指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字符串。
三元运算符
a = x if x > y else y
x,条件成立的结果
y,条件不成立的结果
浙公网安备 33010602011771号