1. 一:先看什么事赋值?
    以例子举例说明:、
  1. a=[123,[112233]]
  2. b=a
  3. print(b) -->b=[123,[112233]]
  1.  

    01):赋值

  1.  
  1. 浅拷贝:我们创建a时,计算机给a开辟了一段空间给a存储数据,并让a指向 存储这个数据的地方(我们暂时叫做存储块)
  2.     那么a 就有了这个存储数据的地址
  3.     我们再把a复制b,由于数据完全一样,所以计算机并没有给b再开辟一个空间去存储数据,而是直接把a的地址引
  4.     用给b了。这样ab其实是指向同一个地址的(可以用print(id(a),id(b)查看他们俩的地址)。浅拷贝。
  1. 赋值需要注意的事项:
  1.       001):例子a是一个列表,它里面的元素还有一个列表,由于ab是指向同一个地址的变量,当列a表里面的那个
  2. 列表元素发生变化时,b也会跟着变化的。
  3. 例子:
  4. a[3].append("0000")---->打印的结果是a增加了,b也增加了
  1. 02:浅拷贝
  1. 例子:
  2. a = [1,2,3,[11,22,33]]
  3. b=a[:] #[:]获取a列表的所有的元素,然后组成一个新的列表给b
  4. b = a.copy() #拷贝就是计算机创建一个新的列表,重新分配一个地址给b
  5. print(a,b)
  6. print(id(a),id(b))
  7. 列表a和列表b的地址是不一样的,他们是内存地址不同的列表!
  8. 当我们向列表a增加一个字符时,
  1. 例如:
  2. a = [1,2,3,[11,22,33]]
  3. b=a.copy() #当我们先copy给b时,可以发现打印结果显示a和b是不一样的
  4. a.append("") #不能将a.append("0000")放在上一句的程序前面,那样是先增加后copy 没有比较意义
  5. print(a) --> [1, 2, 3, [11, 22, 33], '']
  6. print(b) --> [1, 2, 3, [11, 22, 33]]
  7. print(id(a)) --> 927592748360
  8. print(id(b)) --> 927592749128
  9. 由以上例子可以得到,浅拷贝时,当其原来的值发生变化时,他们的内容不会随着改变。
  1.  
  1. 特例:当我们改变列表a中的元素,改变a[3]这个元素列表时 b也会改变
  2. a = [1,2,3,[11,22,33]]
  3. b=a.copy()
  4. a[3].append("")
  5. print(a) --> [1, 2, 3, [11, 22, 33, '']] #a和b完全一样
  6. print(b) --> [1, 2, 3, [11, 22, 33, '']]
  7. print(id(a),id(b)) -->302083610632 302083609928 (ab内存地址不一样)
  1. 03):深拷贝(完全拷贝出一份除了数据一样的两个独立对象,比如一个增加了。另外一个不受影响!)
  1. 深拷贝( copy.deepcopy() )由于不是内置方法,所以需要引入模块 import copy
  2. import copy
  3. a = [1, 2, 3, [11, 22, 33]]
  4. b=copy.deepcopy(a) #深拷贝
  5. a[3].append("") #给列表增加元素
  6. print(a) #打印: [1, 2, 3, [11, 22, 33, '11'], '9999']
  7. print(b) #打印: [1, 2, 3, [11, 22, 33]]
  8. a[3].append("")
  9. print(id(a),id(b)) #打印:577208750472 577207277576
  1. 总结:由以上例子可以得出,对对象进行深拷贝时,会拷贝一份内容一模一样的新对象出来,这个新对象和原来的对象
  2. 除了内容相同外,其他没有任何相同的地方,属于两个不同的对象。
  3. 原对象进行改变后,深拷贝出来的对象不会随之变化,
  4. 特点:深拷贝比较召内存(内存需要给其一个新的存储空间)
  1. 二:数据类型补充:
    lst=["2","3","4","5"]
    001);将列表lst转换为字符串 "".join(lst))
  1. lst_1="&".join(lst) #要记住这个方法
  2. print(lst_1) #打印: 2&3&4&5
  1. 002):将字符串转换为列表(由中括号[] 括起来的字符串 ):(用 str.split()
  1. lst="qwer"
  2. lst_1=lst("_")
  3. print(lst_1) #打印: ['qwer']
  4.  
  5. lst="qwer"
  6. lst_1=lst.split("") #当切割的xx 是空字符串时,会报错:ValueError: empty separator
  7. print(lst_1)
  1. 003):#清空列表:
  1. lst=["qw","rt","t","u"]
  2. for i in lst:
  3. lst.remove(i) ###删除是不彻底的。 原因是每次删除都会导致元素的移动。 每次都会更新一次索引
  4. print(lst)
  5. #打印:['rt', 'u']
  6. # 原因解析:
  7. #进行for 循环输出后,remove会从列表的第一个元素进行移除,当把第一个元素进行移除后,
  8. 此时移除的是索引为0 元素,移除后,后面的元素会往左移动,顶替到刚刚被移除
  9. 的索引为0的位置,这样索引原本为1 的元素顶替到索引为0的位置,成为新的索引为0
  10. 元素,由于计算机已经移除了索引为0 的元素,此时会移除索引为1的元素,(原本索引是1
  11. 顶替到索引0的元素不会被删除,这样,移除的时候就会漏掉移除元素。 最后到尽头了就不
  12. 再进行移除了!所以这个列表的打印结果为:['rt', 'u']
  1.   004):删除列表:
  1. lst=["qw","rt","t","u"]
  2. lst_new=[]
  3. for i in lst:
  4. lst_new.append(i)
  5. print(i) #打印:qw rt t u
  6. # print(lst_new) #打印: ['qw', 'rt', 't', 'u']
  7. for m in lst_new: #由于lst列表是在循环中,不能进行删除,所以我们新建一个新的列表lst_new,
  8. lst.remove(m) # 将新的列表lst_new进行循环,然后再删除旧的列表
  9. print(lst) 打印:[]
  1. 三:fromkeys()帮我们创建字典
  1.  
  1. 创建一个字典d={} dict.fromkeys不是在原有的字典上增加 键值对
  2. d1=dict.fromkeys("张三","李四")
  3. d2=dict.fromkeys("张张","李四")
  4. print(d1) #打印: {'张': '李四', '三': '李四'}
  5. print(d2) #打印:{'张': '李四'} 列表是就是去重复的,由于有两个张,所以只有一个 键值对
  1. # 坑二:
  1. 你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变
  2. d=dict.fromkeys("张三",["许先生"])
  3. print(d) #打印: d={'张': ['许先生'], '三': ['许先生']}
  4. #如果我们对d["张"]这个列表进行 增加后
  5. d["张"].append("增加")
  6. print(d) #打印:{'张': ['许先生', '增加'], '三': ['许先生', '增加']}
  1. 四:集合:
  1. 集合:集合里面的的元素是不可变的,也是不能重复的,所以造成了集合的不重复性,用于去重也是极好的!
  1. s={1,2,3,4,57,7,7,7,7,7} #集合去重
  2. print(s) #打印:{1, 2, 3, 4, 7, 57}
  1. 重点将列表转换为集合,并去重。 set
  1. 例子:
  1. 列表:s=["","","","",""] 将这个列表转换为集合 lst
  2. 列表--〉集合:lst=set(s) #打印:集合: lst={'2', '6', '3'}
  3.  
  4. 集合--〉列表:a=list(lst) #打印:a=['6', '3', '2']
  5.  
  6. #frozenset #可哈希的集合, 不可变. 将集合转换为列表
  7. s = frozenset([1,2,3,4,5])
  8. print(s)
  9. for el in s:
  10. print(el)
  11. 打印:frozenset({1, 2, 3, 4, 5})
  1.  
  1.  

python学习之路---day07的更多相关文章

  1. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  2. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  3. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  4. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  5. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  6. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  7. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

  8. python学习之路,2018.8.9

    python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!

  9. Python学习之路——pycharm的第一个项目

    Python学习之路——pycharm的第一个项目 简介: 上文中已经介绍如何安装Pycharm已经环境变量的配置.现在软件已经安装成功,现在就开始动手做第一个Python项目.第一个“Hello W ...

随机推荐

  1. Functions & Closures

    [Functions] 1.不带返回值的函数: 2.通过tuple返回元素 返回的tuple可按如下方式使用: 3.External Parameter: External parameter的使用: ...

  2. ajax跨域请求解决方案 CORS和JSONP

    什么是跨域: 只要协议.域名.端口有任何一个不同,都会被当成不同的域.而由于浏览器的同源策略(同源策略:域名.协议.端口均相同),浏览器之间要隔离不同域的内容,禁止互相操作,不能执行其他网站的js.所 ...

  3. hdu3530 Subsequence

    题意:There is a sequence of integers. Your task is to find the longest subsequence that satisfies the ...

  4. rsync 服务器架设方法

    作者: 北南南北 来自:Linuxsir.Org 摘要: rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自 ...

  5. HandleErrorAttribute

    前言 一直在给Team的人强调“Good programming is good Error Handling”,没人喜欢YSOD(Yellow Screen of Death).我每次看到黄页的时候 ...

  6. Linux设置串口波特率等参数

    转自 http://blog.csdn.net/zoomdy/article/details/50921336 mingdu.zheng at gmail dot com stty查看串口参数 stt ...

  7. Part6-点亮指路灯_lesson1

    1. 2.GPIO 查阅芯片手册:GPIO 代码: 3.外设基地址初始化 打开arm核手册, 基地址为0x70000000,去搜芯片手册6410, 把这个基地址告诉处理器,通过协处理器的cp15, 转 ...

  8. What’s the Difference Between a Value Provider and Model Binder?

    ASP.NET MVC 3 introduced the ability to bind an incoming JSON request to an action method parameter, ...

  9. 第05章-构建Spring Web应用程序

    1. Spring MVC起步 1.1 跟踪Spring MVC的请求 前端控制器DispatcherServlet 请求旅程的第一站是Spring的DispatcherServlet.与大多数基于J ...

  10. 解决jquery操作checkbox火狐下第二次无法勾选问题

    最近在学习jQuery(版本jquery-1.9.1.js),要求用jQuery实现全选/全不选.反选,在IE(IE8)中没有问题,但在火狐浏览器中调试的时候出现了一些小问题,达不到效果. html代 ...