一、深浅拷贝

3.1 浅copy:

浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表

用法:
list1=[
'egon',
'lxx',
[1,2]
] list2=list1.copy()

对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表。但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受影响.

3.2 深copy

要想copy得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy.

用法:
import copy
list1=[
'egon',
'lxx',
[1,2]
] list2=copy.deepcopy(list1)

二、流程控制之while循环

1、循环的语法与基本使用

print(1)
while 条件:
代码1
代码2
代码3
print(3)

count=0
while count < 5: # 5 < 5
print(count) # 0,1,2,3,4
count+=1 # 5 print('顶级代码----->')

2、死循环与效率问题

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

3、循环的应用

两个问题:

1、重复代码

2、输对了应该不用再重复

username = 'egon'
password = '123'
while True:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password:
print('登录成功')
else:
print('账号名或密码错误')

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('账号名或密码错误')

方式二:break,只要运行到break就会立刻终止本层循环

while True:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password:
print('登录成功')
break # 立刻终止本层循环
else:
print('账号名或密码错误')

7、while循环嵌套与结束

break的方式

while True:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password:
print('登录成功')
while True:
cmd=input("输入命令>: ")
if cmd == 'q':
break
print('命令{x}正在运行'.format(x=cmd))
break # 立刻终止本层循环
else:
print('账号名或密码错误')

改变条件的方式

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 == 'q':
tag=False
else:
print('命令{x}正在运行'.format(x=cmd))
else:
print('账号名或密码错误')

8、while +continue:结束本次循环,直接进入下一次

强调:在continue之后添加同级代码毫无意义,因为永远无法运行

count=0
while count < 6:
if count == 4:
count+=1
continue
# count+=1 # 错误
print(count)
count+=1

9、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('======>')

应用案列:

版本1:

count=0
tag=True
while tag:
if count == 3:
print('输错三次退出')
break
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password:
print('登录成功')
while tag:
cmd=input("输入命令>: ")
if cmd == 'q':
tag=False
else:
print('命令{x}正在运行'.format(x=cmd))
else:
print('账号名或密码错误')
count+=1

版本2:优化

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 == 'q': # 整个程序结束,退出所有while循环
break
else:
print('命令{x}正在运行'.format(x=cmd))
break
else:
print('账号名或密码错误')
count+=1
else:
print('输错3次,退出')

六、深浅拷贝与while循环的更多相关文章

  1. python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作

    目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...

  2. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

  3. day2学python 数据类型+深浅拷贝+循环

    数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...

  4. join,列表和字典用for循环的删除,集合,深浅拷贝

    1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: s = ['a','b','c'] ...

  5. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  6. day06(深浅拷贝,元组,字典,集合)

    1,今日内容: 1.深浅拷贝:**** 2.元组 - 元组可以存放可变类型 *** 3.字典:***** -- 增删改查 -- 常用方法 4.集合:** -- 集合运算 5.数据类型的相互转化 *** ...

  7. python运算符,数据类型,数据类型操作,三目运算,深浅拷贝

    算数运算符: Py2中精确除法需要导入:from __future__ import division,(符由特  ,将来的.滴未省,除法) py3不需要导入 赋值运算符: 比较运算符: 成员运算符: ...

  8. 字典,字符串,元组,字典,集合set,类的初步认识,深浅拷贝

    Python之路[第二篇]:Python基础(一)   入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'Jaso ...

  9. 【python之路15】深浅拷贝及函数

    一.集合数据类型(set):无序不重复的集合,交集.并集等功能 二.三元运算符 三.深浅拷贝 1)字符串和数字:深浅内存地址都一样 2)其他:浅拷贝:仅复制最外面第一层 深拷贝:除了最内层其他均拷贝 ...

随机推荐

  1. 作为前端,你需要懂得javascript实现继承的方法

    在ES6之前,javascript不跟其他语言一样,有直接继承的方法,它需要借助于构造函数+原型对象模拟实现继承.现在我们可以利用ES6的extends方法实现继承,如果想了解更多有关ES6实现的继承 ...

  2. [红日安全]Web安全Day5 - 任意文件上传实战攻防

    本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...

  3. 关于AJAX方法

    ajax的方法每次都记不住这次特意找了资料做了归总: 在这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数, ...

  4. pip install mysqlclient报错(OSError: mysql_config not found)

    报错截图 一般情况是系统没有安装libmysqld-dev 执行 sudo apt install libmysqld-dev完成安装后再 pip install mysqlclient就可以了(系统 ...

  5. ubuntu下载eclipse详细步骤

    1.官网下载 Eclipse IDE for Java EE Developers: https://www.eclipse.org/downloads/packages/ 2.安装eclipse将其 ...

  6. C++泛化双向链表

    泛型双向链表 双向链表(doublyLinkedList.h) /******************************************************************* ...

  7. Nginx的工作原理

    Nginx 工作原理 Nginx由内核和模块组成. Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此locat ...

  8. Community Cloud零基础学习(四)Builder创建自定义的布局

    前几篇讲了Community Cloud权限配置等信息,但是没有太讲过 Community如何进行配置layout,本篇主要描述使用Builder去进行符合需求的Community Layout的构建 ...

  9. 【Vue】---- 手动封装on,emit,off

    一.概念 1. $on("事件名称",回调函数) 事件绑定,一个事件名称上面可能绑定多个函数 2. $emit("事件名称",需要传递的值) 事件触发时,会触发 ...

  10. python第一次作业

    import turtle turtle.pensize(2) turtle.pencolor("black") turtle.fillcolor("red") ...