一.基础数据类型的补充

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. AWS Cloud Practioner 官方课程笔记 - Part 2

    4. AWS Architecture 设计的5个柱子,也就是5大考量点, Security, Reliability, Performance Efficiency, Cost optimizati ...

  2. 剑指offer--day06

    1.1 题目:调整数组顺序使奇数位语偶数前面:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的 ...

  3. 应用安全 - 代码审计 - Python

    flask客户端session导致敏感信息泄露 flask验证码绕过漏洞 CodeIgniter 2.1.4 session伪造及对象注入漏洞 沙箱逃逸

  4. MySQL基础和习题强化(完结)

    Mysql 1.     Mysql基础知识 1.1.     Index and table searching of Mysql 1.1.1.     Basic concepts of Mysq ...

  5. Java web 加载过程

    1.Web容器初始化过程 2.SpringMVC中web.xml配置 3.认识ServletContextListener 4.认识ContextLoaderListener 5.Dispatcher ...

  6. PHP foreach &$ 引发的bug

    在使用foreach &$来更新数据的时候,造成数据被更新掉了 $arr = array(1,2,3,4,5); foreach ($arr as &$row) { $row += 1 ...

  7. POJ-2456.Aggressivecows.(二分求解最大化最小值)

    本题大意:在坐标轴上有n个点,现在打算在这n个点上建立c个牛棚,由于牛对厂主的分配方式表示很不满意,它很暴躁,所以它会攻击离它很近的牛来获得快感,这件事让厂主大大知道了,他怎么可能容忍?所以他决定有策 ...

  8. 三连击 P1008 洛谷 python写法

    三连击 P1008 洛谷 题意 将\(1,2, \cdots,9\)共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数. 解题思路 这里我使用了 ...

  9. 26、前端知识点--利用webpack搭建脚手架一套完整流程

    前言 我们的目标是利用webpack搭建一个基于react + react-router +dva + es6 + less + antd用于中后台开发的脚手架,同学们可能会说社区里那么多优秀的脚手架 ...

  10. 通过离线安装包解决了 from cryptography.hazmat.bindings._openssl import ffi, lib ImportError: /usr/local/python36/lib/python3.6/site-packages/cryptography-2.2.2-py3.6-linux-x86_64.egg/cryptography/hazmat/binding

    场景:内网服务器不能上外网(代理也不通!), 之前安装了PYTHON的几个安装包,但不是知道为什么无法使用PARAMIKO这个模块 在导入 from cryptography.hazmat.bindi ...