day07 深浅copy和while循环

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')

猜你喜欢

转载自www.cnblogs.com/Henry121/p/12449718.html
今日推荐