Python中的 set 与 深浅拷贝】的更多相关文章

Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的数据,此时若执行语句data_01 = data,则现在该份数据有了两个名称(data和data_01),其余都不发生改变,使用任何一个名称对数据进行操作,那么用另外一个名称拿数据时,数据会呈现之间发生的改变.示例如下: 图中,给列表分配了两个名称a与b,对a做改变时b会同样改变,对b做改变时a也会…
python中,A object  = B object  是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个对象在内存中的位置 . 此时当B对象里面的内容发生更改的时候,A对象也自然而然的会跟着更改. 1 name = ["root","admin"] 2 cp_name = name # 对cp_name进行赋值操作 3 4 # 对name列表进行插入 5 name.append('root_temp') 6 print(name,cp_name) #…
字符串 join() 格式:   "拼接的东西".join(可迭代对象) 可以加列表转换成字符串 lis = ['a','b','c','d'] s = "//".join(lis) print(s) #结果 a//b//c//d 相反 split()   可以加字符串转换成列表       切割 列表和字典在循环的时候不能直接被删除需要把要删除的内容记录在新的列表中 然后循环新列表,删除字典或列表 例如 lis = ['a','b','c','d','e'] fo…
import copy lt = [1, 2, [3, 4]] # 赋值会增加一个引用,访问的都是同一数据 # lt2 = lt # 浅拷贝:只拷贝对象本身,里面的元素只会增加一个引用 lt2 = lt.copy() # 专门的拷贝函数,也是浅拷贝,等价于上面的拷贝 lt2 = copy.copy(lt) # 深拷贝:拷贝对象本身,对象中的元素也进行拷贝 # lt2 = copy.deepcopy(lt) lt[0] = 100 lt[2][0] = 30 print(lt) print(lt2…
1.set集合 特点:无序,不重复,元素必须可哈希(不可变) 作用:去重复 本身是可变的数据类型.有增删改查操作.{集合的增删改查操作应用较少,这里不做详细介绍了(这里的增有一个方法update注意这个是迭代添加)} frozenset()冻结的集合.不可变,可哈希. s = {"哈哈哈","嘿嘿嘿","呵呵呵"} s1 = frozenset(s) print(type(s1)) #<class 'frozenset'> 2.深浅c…
Python当中对于拷贝,分为两种类型.一种是数字和字符串,另一种就是列表.元组.字典等其他类型了. 一.数字和字符串的拷贝 1.赋值 举个栗子: a1 = 123123 a2 = 123123 # a2 = a1 # 赋值 print(id(a1)) # 通过id()函数来打印变量在内存当中的地址 print(id(a2)) 输出结果是: 1959780298352 1959780298352 在以上代码块当中,a2与a1所赋的值是一样的,都是数字123123.因为python有一个重用机制,…
拷贝 我们已经详细了解了变量赋值的过程.对于复杂的数据结构来说,赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享. 然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个时候使用赋值就不够明智了.python为这种需求提供了copy模块.提供了两种主要的copy方法,一种是普通的copy,另一种是deepcopy.我们称前者是浅拷贝,后者为深拷贝. 深浅拷贝一直是所有编程语言的重要知识点,下面我们就从内存的角度来分析一下两者的区别. 浅拷贝 首先,我们来了解一下浅拷…
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不成立,将值2赋给result变量 eg:name = "tina" if 1==1 else "fei" name = "tina" if 1!=1 else "fei" print(name) 执行结果如下: fei  小练习:…
本篇主要内容:深浅拷贝,自定义函数,三目运算,lambda表达式, 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(n1…
(一)yield和yield from 转自:理解yield   yield from (1)yield 1.通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件.它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]. 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存. 2.对比可迭代对象,迭代器其实就只是多了一个函数:__next__(),可以不再使用for循环来…
1.深浅拷贝 在Python中将一个变量的值传递给另外一个变量通常有三种:赋值.浅拷贝.深拷贝 Python数据类型可氛围基本数据类型包括整型.字符串.布尔及None等,还有一种由基本数据类型作为最基本的元素所组成的像列表.元组.字典等. 在Python中基本数据类型的赋值.深浅拷贝没有任何意义,都是指向同一块内存地址,也不存在层次问题. 下面看基本数据类型的深浅拷贝 import copy n1 = 'abc' n2 = n1 n3 = copy.copy(n1) n4 = copy.deep…
一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲'] s = "_".join(li) print(s) # 结果为:李嘉诚_何炅_海峰_刘嘉玲 li = '黄花大闺女' s = "_".join(li) print(s) # 结果为:黄_花_大_闺_女 2,列表相关: 循环删除列表中的每一个元素,有如下代码,注意结果并分析原因: li = [11…
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷贝主要内容:一. 基础数据类型补充首先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的自己看一看就可以了.我们补充给一个字符串基本操作 li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"] s = "_".join(li) print(s) li = "黄花大闺女" s = "_&q…
一.数据基本类型之set集合 set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key set集合,是一个无序且不重复的元素集合 1.创建 s = set() #创建空集合 s = {'values1','values2'} #非空集合 2.转换 l = [1,2,5,11] t = (11,22,12) #元组转集合 st2 = set(t) #列表转集合 st = set(l) print(st) print(st2) 3.常用支…
一.知识点补充 1.1字符串的基本操作 li =["李李嘉诚", "麻花藤", "⻩黄海海峰", "刘嘉玲"] s = "_".join(li) print(s) li = "黄花大闺女" s = "_".join(li) print(s) 1.2列表: 循环删除列表中的每一个元素 li = [, , , ] for e in li: li.remove(e) pri…
一.集合数据类型(set):无序不重复的集合,交集.并集等功能 二.三元运算符 三.深浅拷贝 1)字符串和数字:深浅内存地址都一样 2)其他:浅拷贝:仅复制最外面第一层 深拷贝:除了最内层其他均拷贝 四.函数: 1)创建:def 函数名(参数) 2)返回值 return 返回值,如果不指定return则默认返回None 一旦遇到return后面的代码不再执行 3)参数 形参.实参 普通参数数量要一致并且一一对应 指定参数,执行参数的时候指定形参=实参 指定参数的默认值,默认值一定要放在参数的尾部…
先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等") if id(c) == id(d): print("c和d的地址相等") 想想最后打印的是什么? 什么是深拷贝和浅拷贝 深拷贝,就是在对某个对象进行拷贝的时候,如果这个对象持有其他对象的引用,在拷贝的时候会将要拷贝的对象以及引用的对象,一起拷贝. 而浅拷贝只拷贝当前对象和持有的索引,…
>>> a = ['ace',['age',10]] >>> b = a[:] >>> c = list(a) >>> for item in a: ... print(id(item)) ... 140281621219736 140281621134800 >>> for item in b: print(id(item)) ... 140281621219736 140281621134800 >>…
0.前言 工作忙起来后,许久不看算法,竟然DFA敏感词算法都要看好一阵才能理解...真是和三阶魔方还原手法一样,田园将芜,非常可惜啊. 在DFA算法中,第一步是需要理解它的数据结构,在此基础上,涉及到一些Hashmap的赋值.这里的赋值非常有趣,三个Hashmap翻来覆去赋值,就解决了敏感词表的初始化. 里面都是属于下文中的Hashmap“浅拷贝”,那么究竟Java中的Hashmap有哪些拷贝方法呢? 1.测试代码 HashMap hm_source = new HashMap(); HashM…
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉ " ".join方法 循环删除列表中的内容:   错误的  原因:在for循环中,循环到第一个,然后删除,删除之后第二个元素向前挪一位,循环指针向后移一位,再删除,结果会导致22,44没删除掉. 只有这样才是可以的: 注意: 由于删除元素会导致元素索引发生变化,所以删除元素是,尽量不要在原来的地方删除,尽量创建一个新的 然后去批量删除 dict中的fronkey()可以帮我们通过list  创建一个dict 前⾯列表中…
深浅拷贝 深浅拷贝的前提: 相等和相同的关系 深浅拷贝针对的是列表等可变的数据类型. 深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义. a = "aaa" a1 = "aaa" b = a print(a == a1) print(id(a),id(a1),id(b)) #都一样 print(a == b) c = [1,2,3] c1 = [1,2,3] d = c print(c == c1) print(id(c),id(c1),…
首先创建一个列表 a=[[1,2,3],4,5,6] 一.赋值 a=[[1,2,3],4,5,6]b=aa[0][1]='tom'print(a)print(b)结果: [[1, 'tom', 3], 4, 5, 6][[1, 'tom', 3], 4, 5, 6] a=[[1,2,3],4,5,6]b=ab[0][1]='tom'print(a)print(b)结果:[[1, 'tom', 3], 4, 5, 6][[1, 'tom', 3], 4, 5, 6]总结:赋值不管是对a列表改变还是…
1. 1.作业 1.把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重): lst = ['周老二', '周星星', '麻花藤', '周扒皮'] 结果: lst = ['麻花藤'] 2.车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (升级题) cars = ['鲁A32444','鲁B12333','京B8989M','黑C49678','黑C46555','沪 B25041'.....] locals = {'沪':'上海', '黑':'黑龙江', '鲁…
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的值是否相同 is 判断两个内存地址是否相同 小数据池和代码块的关系 注意 : 先执行代码块后执行小数据池 ​ 小数据池 : 支持str,int,bool ​ 数字范围 : -5~256 ​ 字符串 : 1.在做乘法的时候总长度不能超过20 ​ 2.自定义的字符串,长度不限制,字符串必须(字母,数字,…
模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. 1.浅拷贝 创建 格式:copy.copy(x) 例如:n1 = 123 print(copy.copy(n1)) >>> 123 返回值:obj #对于浅拷贝可以调用copy模块,当然也可以直接使用copy函数来执行,实际中直接使用copy函数比较常见. int拷贝 例如:n1 = 123…
在ObjC中,什么是深浅拷贝? 深浅拷贝分别指深拷贝和浅拷贝,即mutableCopy和copy方法. copy复制一个不可变对象,而mutableCopy复制一个mutable可变对象. 什么时候用到深浅拷贝?下面举几个例子说明.  本质确实是地址相同,就是浅拷贝,地址不同就是深拷贝. 非容器类对象 如NSString,NSNumber等一类对象 示例1: 12345     // 非容器类对象     NSString *str = @"origin string";     NS…
在ObjC中,什么是深浅拷贝?  深浅拷贝分别指深拷贝和浅拷贝,即 mutableCopy 和 copy 方法.  copy复制一个不可变对象,而 mutableCopy 复制一个 mutable 可变对象. 非容器类对象  如NSString,NSNumber等一类对象 示例1: // 非容器类对象 NSString *str = @"origin string"; NSString *strCopy = [str copy]; NSMutableString *mstrCopy =…
一.复习导论(数据类型相关) 想掌握JS的深浅拷贝,首先来回顾一下JS的数据类型,JS中数据类型分为基本数据类型和引用数据类型. 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问.包含Number.String.Boolean.null.undefined .Symbol.bigInt. 引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针,这个指针指向堆内存中的引用地址.除了上面的 7 种基本数据类型外,剩下…
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的内存空间是可以被修改的. 下面我们定义一个列表: list=[1,2,3,4,5] list1=list list[0]=6 >>>list [6,2,3,4,5] >>>list1 [6,2,3,4,5] 如果我们只想改变list,问题就出现了. 赋值操作 list1 =…
该书关于深浅拷贝的论述: 6.20. *Copying Python Objects and Shallow and Deep Copies "when shallow copies are made, the string is explicitly copied and a new (string) object created" 这是错的.当一个容器对象被浅拷贝,字符串也是和列表一样,都只是建立引用. 奇特的是,作者在这句话之前写有自相矛盾的句子: A shallow copy…