基础知识补充

列表的地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,条件不成立的结果

 

posted on 2019-01-09 17:59  六月_海动  阅读(70)  评论(0)    收藏  举报