目录
1. 深浅copy
对于列表的拷贝来说:
如果是简单的将列表进行赋值与另一个列表,则并不是拷贝而是两个列表指向了同一个地址
list1=[
'egon',
'lxx',
[1,2]
]
# 1、二者分隔不开,list改list2也跟着该,因为指向的就是同一个地址
list2=list1 # 这不叫copy
list1[0]='EGON'
print(list2)
1.2 如何copy列表
需求:
- 拷贝一下原列表产生一个新的列表
- 想让两个列表完全独立开,并且针对的是改操作的独立而不是读操作
1.2.1 浅拷贝:
是把原列表第一层的内存地址完全拷贝一份给新列表。即只能保证对原列表中第一层地址(**不可变类型**)的改操作不受影响,涉及到原列表中第二层地址(**可变类型**)的改操作时,原列表变,新列表也跟着变-
1.2.2 深拷贝:
将两个列表的改操作**完全的独立开**。即不管原列表对第几层地址的改操作,新列表都不受影响,保持最开始复制的列表元素不变。
1.2.3 如何使用深浅copy
#浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
list1=[
'egon',
'lxx',
[1,2]
]
list3=list1.copy()
#深copy
import copy
list1=[
'egon',
'lxx',
[1,2]
]
list3=copy.deepcopy(list1)
2. while循环
2.1什么是循环结构
循环结构就是重复执行某段代码块
2.2为什么要用循环结构
让计算机能够具备人重复执行某件事情的能力
2.3如何使用循环结构
2.3.1 while循环语法
while 条件:
代码1
代码2
代码3
'''
while的运行步骤:
步骤1:如果条件为真,则自上而下的执行代码1、2、3...
步骤2:执行完最后一条代码时再次判断条件,如果条件为Treu则重复步骤1,如果条件为False,则结束循环
'''
2.3.2 while循环的应用案例
# break结束本层循环
username = "henry"
password = "123"
while+break的使用
# 记录错误验证的次数
count = 0
while count < 3:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
break # 用于结束本层循环
else:
print("输入的用户名或密码错误!")
count += 1
while循环嵌套+break
# 如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
count = 0
while count < 3: # 第一层循环
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while True: # 第二层循环
cmd = input('>>: ')
if cmd == 'quit':
break # 用于结束本层循环,即第二层循环
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1
while循环嵌套+tag的使用
'''
让所有while循环的条件都用同一个变量,该变量的初始值为True,
一旦在某一层将该变量的值改成False,则所有层的循环都结束
'''
tag = True
while tag:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while tag:
cmd = input('>>: ')
if cmd == 'quit':
tag = False # tag变为False, 所有while循环的条件都变为False
break
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1
while+continue的使用
- continue用来跳出当前次循环(即跳过本次循环直接进入下一次循环)
- 注意:在continue之后添加同级代码毫无意义,因为永远无法运行
# 打印1到10之间,除7以外的所有数字
number=11
while number>1:
number -= 1
if number==7:
continue
print(number)
while+else的使用
count=0
while count < 6:
if count == 4:
count+=1
continue
print(count)
count+=1
else:
print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
2.3.3 死循环
对于一个程序来说,死循环并不可怕,因为在正常的编写代码的过程中,本身就需要IO操作来给我们反馈信息,而IO操作的过程中,程序得到了良好的缓存,并不会对计算机操作太大的压力
最致命的死循环是,不进行IO操作,只重复进行无意义的数字运算,长时间运行,CPU会吃力
# 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
# while 1:
# print('xxxx')