一.基础数据类型的补充

1.其他类型之间的相互转换

例如:str = int(str) str => int;

   int = list(int) int => list;

   tuple = dict(tuple) tuple => dict;

但是:str => list时用的是str = str.split(元素)

   list => str时用的是str = 元素.join(list)

代码展示:

 s = "|".join(["美国往事","当幸福来敲门","穿靴子的猫"])
print(s)
s = s.split("|")
print(s)
#输出结果: 美国往事|当幸福来敲门|穿靴子的猫 ['美国往事', '当幸福来敲门', '穿靴子的猫']

二.关于for的一些解释

1.for在运行的过程中,会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个,

然后获取到第0个,紧接着删除第0个,这个时候,原来是第一个的元素会自动的变成第0个,然后指针向后移动一次,指向1元素,这时所有元素向前移了一位.

2.总结:字典,列表在for循环过程中,不论是del还是remove,pop都不能实现

3.怎样在for循环的过程中删除元素:

代码展示:

 lst = ["周杰伦","周润发","周星星","马化腾"]
li = []
for i in lst:
if i.startswith("周"):
li.append(i)
for c in li:
lst.remove(c)
print(lst)
#输出结果:['马化腾']

这是把以"周"开头的字符串去除掉;

(1)要新建一个列表,先把符合条件的添加进列表,

(2)然后再遍历该列表,用原来的列表删除遍历到的新列表赋值给变量c的字符串;

*注意转成False的数据:

0,"",None,[],(),{},set() ==>False;

三.set集合

1.set最大的的用处就是去除集合中的重复;set中的元素必须是可哈希的(int,str,tuple,bool);

所以列表,字典,和set(set本身是不可hash的.set是可变的),set中得元素也是无序的;

 set1 = {'','alex',2,True,[1,2,3]} # 报错
set2 = {'','alex',2,True,{1:2}} # 报错
set3 = {'','alex',2,True,(1,2,[2,3,4])} # 报错

2.1 增加

代码展示:

 s = {"刘嘉玲", '关之琳', "王祖贤"}
s.add("郑裕玲")
print(s)
s.add("郑裕玲") # 重复的内容不不会被添加到set集合中
print(s)
#集合和字典长得很像,但是没有key和value;

2.2 删除

s.remove(元素)#直接删除元素;

s.pop()#随机

3.常用操作:

s1 = {"刘能", "赵四", "⽪皮⻓长⼭山"}

s2 = {"刘科⻓长", "冯乡⻓长", "⽪皮⻓长⼭山"}

# 交集 # 两个集合中的共有元素

print(s1 & s2)  #结果: {'⽪皮⻓长⼭山'}

print(s1.intersection(s2))  # 结果:{'⽪皮⻓长⼭山'}

# 并集

print(s1 | s2) # {'刘科⻓长', '冯乡⻓长', '赵四', '⽪皮⻓长⼭山', '刘能'}

print(s1.union(s2)) # {'刘科⻓长', '冯乡⻓长', '赵四', '⽪皮⻓长⼭山', '刘能'}

# 差集

print(s1 - s2) # {'赵四', '刘能'} 得到第⼀个中单独存在的

print(s1.difference(s2)) # {'赵四', '刘能'}

# ⼦集

print(s1 < s2) # set1是set2的⼦子集吗? True

print(s1.issubset(s2))

# 超集

print(s1 > s2) # set1是set2的超集吗? False

print(s1.issuperset(s2))

三.深浅拷贝

1.浅拷贝

从图可以看出:在列表进行赋值时,两个列表对应一个内存地址的对象;一个列表发生改变,那另一个列表也发生相应改变;

总结:对于列表和字典来说,直接赋值,其实是把内存地址交给变量,并不是复制了一份,所以列表1和列表2的指向是一样的;

浅拷贝格式:lst2 = lst1.copy() print(id(lst1),id(lst2))这时候两个列表内存地址就不一样了,而不互相影响;

代码展示:

 lst = ["周杰伦","周润发","周星星","马化腾"]
lst1 = lst.copy()
lst1.append("马鹏林")
print(lst,id(lst))
print(lst1,id(lst1))
#输出结果
['周杰伦', '周润发', '周星星', '马化腾'] 2259879557704
['周杰伦', '周润发', '周星星', '马化腾', '马鹏林'] 2259879558408

两个列表不一样,而且内存地址不一样;浅拷贝只会拷贝第一层,所以称为浅拷贝;

浅拷贝还有一种格式:

 lst1 = ["赵本山", "刘能", "赵四"]
lst2 = lst1[:] # 切片会产生新的对象
lst1.append("谢大脚")
print(lst1,id(lst1))
print(lst2,id(lst2))
#输出结果:
['赵本山', '刘能', '赵四', '谢大脚'] 1400279607368
['赵本山', '刘能', '赵四'] 1400280414792

所以通过上面可以看出,切片也可以进行浅拷贝;切片相当于从源列表copy出一段范围,成为新的列表;

2.深拷贝

 lst1 = ["超人", "七龙珠", "葫芦娃",  ["王力宏", "渣渣辉"]]
lst2 = lst1.copy() # 拷贝. 浅拷贝 拷贝第一层
lst1[3].append("大阳哥")
print(lst1,id(lst1[3]))
print(lst2,id(lst2[3]))
#输出结果:
['超人', '七龙珠', '葫芦娃', ['王力宏', '渣渣辉', '大阳哥']] 1172889937992
['超人', '七龙珠', '葫芦娃', ['王力宏', '渣渣辉', '大阳哥']] 1172889937992

从上面可以看出,浅拷贝只拷贝第一层,所以列表1和列表2的地址是一样的;

引出深拷贝:

代码展示:

 #深拷贝
import copy
lst1 = ["超人", "七龙珠", "葫芦娃", ["王力宏", "渣渣辉"]]
lst2 = copy.deepcopy(lst1) # 把lst1扔进去进行深度拷贝 , 包括内部的所有内容进行拷贝
lst1[3].append("大阳哥")
print(lst1,id(lst1[3]))
print(lst2,id(lst2[3]))
#输出:
['超人', '七龙珠', '葫芦娃', ['王力宏', '渣渣辉', '大阳哥']] 3012638897480
['超人', '七龙珠', '葫芦娃', ['王力宏', '渣渣辉']] 3012638898888

Python_007(深浅拷贝)的更多相关文章

  1. Python 从零学起(纯基础) 笔记 之 深浅拷贝

    深浅拷贝 1. import  copy#浅拷贝copy.copy()#深拷贝copy.deepcopy()#赋值 = 2.   对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个 ...

  2. python——赋值与深浅拷贝

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  3. Python中的深浅拷贝

    1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...

  4. Python-Day3知识点——深浅拷贝、函数基本定义、内置函数

    一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...

  5. python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典

    深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...

  6. python 学习笔记5(深浅拷贝与集合)

    拷贝 我们已经详细了解了变量赋值的过程.对于复杂的数据结构来说,赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享. 然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个 ...

  7. Python开发【第二章】:Python深浅拷贝剖析

    Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...

  8. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...

  9. @proprety数组字典字符串用copy和strong区别(深浅拷贝)

    ////  @proprety数组字典字符串用copy和strong区别(深浅拷贝).h//  IOS笔记//// /* _proprety________copy_strong_________h ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_10-练习一_生成1-n之间

    生成随即数的时候,总是会短一个,因为它是从0开始的 这是左闭右闭区间. 循环100次输出的结果

  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_6_字节输出流写多个字节的方法

    一次写多个字节的方法 要在txt内显示100.49代表1 48 代表0 一次写多个字节 负数前两个组成一个中文.-65和-66 字节数组的一部分 写入字符串方法 当前用的编码格式是utf-8,utf- ...

  3. ELK Stack 企业级日志收集平台

    ELK Stack介绍 大型项目,多产品线的日志收集 ,分析平台 为什么用ELK? 1.开发人员排查问题,服务器上查看权限 2.项目多,服务器多,日志类型多 ELK 架构介绍 数据源--->lo ...

  4. KETTLE——(一)资源库

    对KETTLE有了大概的了解,pdi-ce-6.0.1.0-386也下载完成了. 1.解压pdi-ce-6.0.1.0-386.zip文件,双击运行Spoon.bat(KETTLE是Java开发的,运 ...

  5. node+express POST请求

    // POST 登录 app.post('/login', function (req, res) { // 定义了一个post变量,用于暂存请求体的信息 let [post,addSql,addSq ...

  6. day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理

    复习 ''' 1.模块 -- 一系列功能的集合体,用文件来管理一系列有联系的功能,该文件我们称之为模块,文件名就是模块名 -- import | from...import 来导入模块,从而使用模块中 ...

  7. ubuntu彩色图形界面

    Ubuntu的默认 ~/.bashrc 文件里,有一个控制是否打开彩色提示符文件的变量 $force_color_promt,只需要打开这个变量的开关,就可以使用彩色的命令行提示符了. 这对于输查看命 ...

  8. Vue --》 如何在vue中调用百度地图

    1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...

  9. thead tbody tfoot

    <!DOCTYPE html> <html lang="en"> <head> <title>Title</title> ...

  10. [Web 前端] 009 css 常用的文本样式设置

    常用的文本 css 样式 概览 参数 释义 举例 color 设置文字的颜色 color:red; font-size 设置文字的大小 font-size:12px; font-family 设置文字 ...