一、深浅拷贝

3.1 浅copy:

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

  1. 用法:
  2. list1=[
  3. 'egon',
  4. 'lxx',
  5. [1,2]
  6. ]
  7. list2=list1.copy()

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

3.2 深copy

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

  1. 用法:
  2. import copy
  3. list1=[
  4. 'egon',
  5. 'lxx',
  6. [1,2]
  7. ]
  8. list2=copy.deepcopy(list1)

二、流程控制之while循环

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

  1. print(1)
  2. while 条件:
  3. 代码1
  4. 代码2
  5. 代码3
  6. print(3)

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

2、死循环与效率问题

  1. count=0
  2. while count < 5: # 5 < 5
  3. print(count) # 0,1,2,3,4
  4. while True:
  5. name=input('your name >>>> ')
  6. print(name)

纯计算无io的死讯会导致致命的效率问题

  1. while True:
  2. 1+1
  3. while 1:
  4. print('xxxx')

3、循环的应用

两个问题:

1、重复代码

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

  1. username = 'egon'
  2. password = '123'
  3. while True:
  4. inp_name=input('请输入您的账号:')
  5. inp_pwd=input('请输入您的密码:')
  6. if inp_name == username and inp_pwd == password:
  7. print('登录成功')
  8. else:
  9. print('账号名或密码错误')

4、退出循环的两种方式

方式一:将条件改为False,等到下次循环判断条件时才会生效

  1. tag=True
  2. while tag:
  3. inp_name=input('请输入您的账号:')
  4. inp_pwd=input('请输入您的密码:')
  5. if inp_name == username and inp_pwd == password:
  6. print('登录成功')
  7. tag = False # 之后的代码还会运行,下次循环判断条件时才生效
  8. else:
  9. print('账号名或密码错误')

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

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

7、while循环嵌套与结束

break的方式

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

改变条件的方式

  1. tag=True
  2. while tag:
  3. inp_name=input('请输入您的账号:')
  4. inp_pwd=input('请输入您的密码:')
  5. if inp_name == username and inp_pwd == password:
  6. print('登录成功')
  7. while tag:
  8. cmd=input("输入命令>: ")
  9. if cmd == 'q':
  10. tag=False
  11. else:
  12. print('命令{x}正在运行'.format(x=cmd))
  13. else:
  14. print('账号名或密码错误')

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

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

  1. count=0
  2. while count < 6:
  3. if count == 4:
  4. count+=1
  5. continue
  6. # count+=1 # 错误
  7. print(count)
  8. count+=1

9、while +else:针对break

  1. count=0
  2. while count < 6:
  3. if count == 4:
  4. count+=1
  5. continue
  6. print(count)
  7. count+=1
  8. else:
  9. print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
  10. count=0
  11. while count < 6:
  12. if count == 4:
  13. break
  14. print(count)
  15. count+=1
  16. else:
  17. print('======>')

应用案列:

版本1:

  1. count=0
  2. tag=True
  3. while tag:
  4. if count == 3:
  5. print('输错三次退出')
  6. break
  7. inp_name=input('请输入您的账号:')
  8. inp_pwd=input('请输入您的密码:')
  9. if inp_name == username and inp_pwd == password:
  10. print('登录成功')
  11. while tag:
  12. cmd=input("输入命令>: ")
  13. if cmd == 'q':
  14. tag=False
  15. else:
  16. print('命令{x}正在运行'.format(x=cmd))
  17. else:
  18. print('账号名或密码错误')
  19. count+=1

版本2:优化

  1. count=0
  2. while count < 3:
  3. inp_name=input('请输入您的账号:')
  4. inp_pwd=input('请输入您的密码:')
  5. if inp_name == username and inp_pwd == password:
  6. print('登录成功')
  7. while True:
  8. cmd=input("输入命令>: ")
  9. if cmd == 'q': # 整个程序结束,退出所有while循环
  10. break
  11. else:
  12. print('命令{x}正在运行'.format(x=cmd))
  13. break
  14. else:
  15. print('账号名或密码错误')
  16. count+=1
  17. else:
  18. 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. java design pattern - adapter pattern

    场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B ...

  2. Daily Practice 2016-09-20

    算法 回文(Palindrome)数字:判断一个数字是不是回文数字,不能使用另外的空间. 提示: 负数可以是回文数字吗? 如果转为字符串需要新分配空间 你也许想到了反转数字,但反转数字可能溢出,怎样处 ...

  3. C++走向远洋——36(数组做数据成员,工资)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...

  4. C++扬帆远航——18(项目五2,递归式)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:qiushi.cpp * 作者:常轩 * 微信公众号:World ...

  5. git还原历史某一版本

    返回上一版本 git reset --hard HEAD^ 常用的命令git refloggit reset --hard "填写版本号" 黄色的就是版本号 其他查看以前版本的命令 ...

  6. #2020.1.26笔记——springdatajpa

    2020.1.26笔记--springdatajpa 使用jpa的步骤: 1. 导入maven坐标 <?xml version="1.0" encoding="UT ...

  7. 全网最详细的一篇Flutter 尺寸限制类容器总结

    Flutter中尺寸限制类容器组件包括ConstrainedBox.UnconstrainedBox.SizedBox.AspectRatio.FractionallySizedBox.Limited ...

  8. 【Amaple教程】2. 模块

    正如它的名字,模块用于amaplejs单页应用的页面分割,所有的跳转更新和代码编写都是以模块为单位的. 定义一个模块 一个模块由<module>标签对包含,内部分为template模板.J ...

  9. Spring配置cache(concurrentHashMap,guava cache、redis实现)附源码

    在应用程序中,数据一般是存在数据库中(磁盘介质),对于某些被频繁访问的数据,如果每次都访问数据库,不仅涉及到网络io,还受到数据库查询的影响:而目前通常会将频繁使用,并且不经常改变的数据放入缓存中,从 ...

  10. Hyperledger Fabric1.4环境搭建

    参考文档:https://www.cnblogs.com/cbkj-xd/p/11067790.html 1. 设置下载源为阿里源 sudo vim /etc/apt/sources.list 在配置 ...