深浅copy
1、赋值,二者分隔不开,list改list2也跟着该,因为指向的就是同一个地址
list1=[ 'sa', 'xx', [1,2] ] list2=list1 # 这不叫copy list1[0]='SA' print(list2) print(id(list1)) print(id(list2))
2.浅copy,是把原列表第一层的内存地址不加区分完全copy一份给新列表
对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表
但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变即原列表的索引指向仍然指向原来的内存地址
list1=[ 'egon', 'lxx', [1,2] ] list3=list1.copy() print(list3) print(id(list1)) print(id(list3)) print(id(list1[0]),id(list1[1]),id(list1[2])) print(id(list3[0]),id(list3[1]),id(list3[2])) list1[0] = 'aaa' print(list1) print(list3) list1[2][0]=333 list1[2][1]=444 print(list1) print(list3) print(id(list1[0]),id(list1[1]),id(list1[2])) print(id(list3[0]),id(list3[1]),id(list3[2]))
# 4427605824
# 4428027456
# 4428027056 4427561840 4427573568
# 4428026928 4427561840 4427573568
# ['aaa', 'gao', [111, 222]]
# ['sa', 'gao', [111, 222]]
# ['aaa', 'gao', [333, 444]]
# ['sa', 'gao', [333, 444]]
3.深copy,要想copy得到的新列表与原列表的改操作完全独立开必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
import copy list1=[ 'egon', 'lxx', [1,2] ] list3=copy.deepcopy(list1) print(id(list1)) print(id(list3)) print(list3) # 不可变 不可变 可变 print(id(list1[0]),id(list1[1]),id(list1[2])) print(id(list3[0]),id(list3[1]),id(list3[2])) ''' 4497919088 4498367856 4498449216 4497919088 4498367856 4498595328 ''' print(list3) print(id(list1[2][0]),id(list1[2][1])) print(id(list3[2][0]),id(list3[2][1])) list1[0]='EGON' list1[1]='LXX' list1[2][0]=111 list1[2][1]=222 print(list1) print(list3)
流程控制之if判断
1.分支结构就是根据条件判断的真假去执行不同分支对应的子代码
2.为什么要用分支结构:人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞.所以程序中必须有相应的机制来控制计算机具备人的这种判断能力
'''
语法1:
if 条件:
代码1
代码2
代码3
'''
score = input('请输入您的成绩:') # score="18" score=int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('很差,小垃圾')
流程控制之while循环
1 什么是循环结构循环结构就是重复执行某段代码块
2 为什么要用循环结构:人类某些时候需要重复做某件事情所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力
'''
print(1)
while 条件:
代码1
代码2
代码3
print(3)
'''
3 死循环与效率问题
count=0 while count < 5: # 5 < 5 print(count) # 0,1,2,3,4 while True: name=input('your name >>>> ') print(name) # 纯计算无io的死讯会导致致命的效率问题 while True: 1+1
4 退出循环的两种方式
方式一:将条件改为False,等到下次循环判断条件时才会生效
tag=True while tag: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') tag = False # 之后的代码还会运行,下次循环判断条件时才生效 else: print('账号名或密码错误') print('====end====')
方式二:break,只要运行到break就会立刻终止本层循环
while True: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') break # 立刻终止本层循环 else: print('账号名或密码错误') print('====end====')
5 while +continue:结束本次循环,直接进入下一次
强调:在continue之后添加同级代码毫无意义,因为永远无法运行
count=0 while count < 6: if count == 4: count+=1 continue # count+=1 # 错误 print(count) count+=1
6 while +else:针对break
count=0 while count < 6: if count == 4: count+=1 continue print(count) count+=1 else: print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行') count=0 while count < 6: if count == 4: break print(count) count+=1 else: print('======>')