深浅copy及流程控制之while循环
Posted 200024mc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅copy及流程控制之while循环相关的知识,希望对你有一定的参考价值。
一、深浅copy
1、浅拷贝:是把列表第一层的内存地址不加区分完全copy一份新的列表。
例:
list1=[
‘egon‘,
‘lxx‘,
[1,2]
]
1、浅拷贝:是把列表第一层的内存地址不加区分完全copy一份新的列表。
例:
list1=[
‘egon‘,
‘lxx‘,
[1,2]
]
list3=list1.copy()
print(list3)
print(id(list1))
print(id(list3))
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]))
print(id(list3[0]),id(list3[1]),id(list3[2]))
实验1:对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的
内存地址,并不会影响新列表
list1[0]=‘EGON‘
list1[1]=‘LXX‘
list1[2]=123
内存地址,并不会影响新列表
list1[0]=‘EGON‘
list1[1]=‘LXX‘
list1[2]=123
实验2:但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变
即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受
影响,如下
list1[2][0]=111
list1[2][1]=222
print(list1)
print(list3)
即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受
影响,如下
list1[2][0]=111
list1[2][1]=222
print(list1)
print(list3)
综合实验1和实验2可以得出,要想copy得到的新列表与原列表的改操作完全独立开
必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
2、深拷贝:搞明白浅拷贝之后,深拷贝就很好理解了,深拷贝就是在内存中重新开辟一块空间,
通俗点讲就是,深拷贝就是重新定义一个变量,于之前的没有半毛钱关系,所以更改里面的内容,原来的并不会发生改变。
例:import copy
list1=[
‘egon‘,
‘lxx‘,
[1,2]
]
通俗点讲就是,深拷贝就是重新定义一个变量,于之前的没有半毛钱关系,所以更改里面的内容,原来的并不会发生改变。
例:import copy
list1=[
‘egon‘,
‘lxx‘,
[1,2]
]
list3=copy.deepcopy(list1)
print(id(list1))
print(id(list3))
print(list3)
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]))
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[1]=‘LXX‘
list1[2][0]=111
list1[2][1]=222
print(list1)
print(list3) 待修整
list1[2][1]=222
print(list1)
print(list3) 待修整
二、while循环
1、什么是while循环:是python里循环结构的一种类型。
为什么要用循环:人类某些时刻要重复做某些事,所以程序中必须要有相应的机制来控制计算机像人一样具备这种循环做事的能力。
1、什么是while循环:是python里循环结构的一种类型。
为什么要用循环:人类某些时刻要重复做某些事,所以程序中必须要有相应的机制来控制计算机像人一样具备这种循环做事的能力。
2、while循环语法:
while 条件:
代码1
代码2
代码3
代码1
代码2
代码3
while的运行步骤:
步骤1:如果条件为真,则自上而下的执行代码1、2、3...
步骤2:执行完最后一条代码时再次判断条件,如果条件为Treu则重复步骤1,如果条件为False,则结束循环.
步骤1:如果条件为真,则自上而下的执行代码1、2、3...
步骤2:执行完最后一条代码时再次判断条件,如果条件为Treu则重复步骤1,如果条件为False,则结束循环.
2、while循环应用案例:
案例一:用户认证程序
案例二:while+break的使用
使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢? 这就
需要用到break了!
使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢? 这就
需要用到break了!
案例三:案例三: while循环嵌套+break
如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break。
如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break。
案例四: while循环嵌套+tag的使用
针对嵌套多层的while循环,如果我们的目的很明确就是要在某- -层直接退出所有层的循环,实有一个窍门,就让所有while循环的
条件都用同一个变量,该变量的初始值为True, -但在某-层将该变量的值改成False,则所有层的循环都结束。
针对嵌套多层的while循环,如果我们的目的很明确就是要在某- -层直接退出所有层的循环,实有一个窍门,就让所有while循环的
条件都用同一个变量,该变量的初始值为True, -但在某-层将该变量的值改成False,则所有层的循环都结束。
案例五:while+continue的使用break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环。
案例六: while+else的使用
在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break中止的话,就会执行else后面的语句,所
以我们可以用else来验证,循环是否正常结束。
在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break中止的话,就会执行else后面的语句,所
以我们可以用else来验证,循环是否正常结束。
如果执行中被break,就不会执行else的语句。
以上是关于深浅copy及流程控制之while循环的主要内容,如果未能解决你的问题,请参考以下文章
流程控制之if...elif...else和流程控制之while循环