集合 (set) 的增删改查及 copy()方法
一、集合
1.集合的创建
- set1 = set({1,2,'barry'})
- set2 = {1,2,'barry'}
- print(set1,type(set1))
- print(set2,type(set2))
- 结果:{1, 2, 'barry'} <class 'set'>
- {1, 2, 'barry'} <class 'set'>
2.集合的增
2.1直接增加
- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.add('女神')
- print(set1) #增加,无序的。
- 结果:{'ritian', 'alex', 'egon', '女神', 'wusir', 'barry'}
2.2迭代增加
- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.update('A')
- print(set1)
- set1.update('老师')
- print(set1)
- set1.update([1,2,3])
- print(set1)
- 结果:{'egon', 'alex', 'ritian', 'wusir', 'A', 'barry'}
- {'egon', '老', 'alex', 'ritian', 'wusir', 'A', '师', 'barry'}
- {'egon', '老', 1, 2, 3, 'alex', 'ritian', 'wusir', 'A', '师', 'barry'}
3.集合的减
3.1 .remove('元素')
- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.remove('alex') #删除一个元素
- print(set1)
- 结果:{'wusir', 'ritian', 'barry', 'egon'}
3.2 .pop()
- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.pop() #随机删除一个元素
- print(set1)
- 结果:{'alex', 'ritian', 'wusir', 'egon'}
3.3 .clear()
- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.clear() #清空集合
- print(set1)
- 结果:set()
3.4 del
- set1 = {'alex','wusir','ritian','egon','barry'}
- del set1 #删除集合,会报错
- print(set1)
- 结果:报错
4.集合的其他玩法
4.1交集 (& 或者 intersection)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 & set2)
- print(set1.intersection(set2))
- 结果:{4, 5}
- {4, 5}
4.2并集 (| 或者 union)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 | set2)
- print(set1.union(set2))
- 结果:{1, 2, 3, 4, 5, 6, 7, 8}
- {1, 2, 3, 4, 5, 6, 7, 8}
4.3差集 (- 或difference)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set{1, 2, 3}1 - set2)
- print(set1.difference(set2))
- 结果:{1, 2, 3}
- {1, 2, 3}
4.4反交集(^ 或者 symmetric_difference)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 ^ set2)
- print(set1.symmetric_difference(set2))
- 结果:{1, 2, 3, 6, 7, 8}
- {1, 2, 3, 6, 7, 8}
4.5子集与超集(< 或者 issubset)
- set1 = {1,2,3}
- set2 = {1,2,3,4,5,6}
- print(set1 < set2)
- print(set1.issubset(set2))
- 结果:True
- True
- print(set2 > set1)
- print(set2.issuperset(set1))
- 结果:True
- True
5. frozenset不可变集合,让集合变成不可变类型。
- s = frozenset('barry')
- print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
二、深浅copy
1.先看赋值运算。
- l1 = [1,2,3,['barry','alex']]
- l2 = l1
- l1[0] = 111
- print(l1) # [111, 2, 3, ['barry', 'alex']]
- print(l2) # [111, 2, 3, ['barry', 'alex']]
- l1[3][0] = 'wusir'
- print(l1) # [111, 2, 3, ['wusir', 'alex']]
- print(l2) # [111, 2, 3, ['wusir', 'alex']]
对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。
2.浅copy
- l1 = [1,2,3,['barry','alex']]
- l2 = l1.copy()
- print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
- print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
- l1[1] = 222
- print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
- print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
- l1[3][0] = 'wusir'
- print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
- print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3.深deepcopy
- import copy
- l1 = [1,2,3,['barry','alex']]
- l2 = copy.deepcopy(l1)
- print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
- print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
- l1[1] = 222
- print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
- print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
- l1[3][0] = 'wusir'
- print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
- print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
集合 (set) 的增删改查及 copy()方法的更多相关文章
- Python笔记·第六章——集合 (set) 的增删改查及 copy()方法
简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 1.去重,把一个列表变成集合,就自动去重了. ...
- Python笔记·第五章—— 列表(List) 的增删改查及其他方法
一.列表的简介 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...
- 用DBContext (EF) 实现通用增删改查的REST方法
我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...
- 列表(List) 的增删改查及其他方法
一.列表的简介 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...
- hibernate实现增删改查的各种方法
1>接口(主要是增删改查的接口)BaseDao.java /** * * @author fly.zhou */ public interface IBaseDao { //增加对应实体的一条记 ...
- linux的sed(增删改查)使用方法
sed的增删改查的基本操作 参考:https://www.cnblogs.com/0zcl/p/6855740.html 01:增(a) 2个sed命令,分别是:(这些操作都是在内存中进行的,所以不会 ...
- java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,
1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...
- mongodb 集合操作 (增删改查)
1.插入: 使用insert或save方法想目标集合插入一个文档: db.person.insert({"name":"ryan","age" ...
- 字典 (dict) 的增删改查及其他方法
一.字典 1.字典简介: 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无 ...
随机推荐
- CRL快速开发框架升级到4.52,谈谈开发过程中的优化
CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...
- 9.python面向对象编程
面向对象的几个核心特性如下 Class 类一个类即是对一类拥有相同属性的对象的抽象.蓝图.原型.在类中定义了这些对象的都具备的属性(variables(data)).共同的方法 Object 对象 一 ...
- SQL 杂活
例子一:查询两个表数据并且分页展示 select * from ( select ROW_NUMBER() OVER(order by CreateTime desc) as rownum,* fro ...
- Python环境以及编辑器
1.Python环境搭建 http://blog.csdn.net/qq_29663071/article/details/70158204 备注:a.个人感觉 安装路径为自己选择的 位置和特性 b. ...
- 为什么epoll会那么高效
参考(原文简直超赞):https://zhidao.baidu.com/question/687563051895364284.html下面是我结合原文写的,为了便于自己理解:关于阻塞和非阻塞的理解可 ...
- 关于foo的一个面试题
今天看到一个关于foo的一个面试题,赶脚特别有意思 function foo(){// 第16行 getName = function(){console.log(1)} return this } ...
- 第二节 安装CentOS
Linux 第二节一.安装VNware workstation 10二.安装CentOS 1.root/123456 用户登录[root@localhost ~]# 2.关机 init 0 3.ifc ...
- ArrayList中对象 排序
public class Student implements Comparable { private String studentname; public int studentage; publ ...
- ab返回结果参数分析
Server Software 返回的第一次成功的服务器响应的HTTP头.Server Hostname 命令行中给出的域名或IP地址Server Port 命令行中给出端口.如果没 ...
- js 停止事件冒泡 阻止浏览器的默认行为(阻止a标签跳转 )
在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到"停止事件冒泡"和"阻止浏览器默认行为". 1..停止事件冒泡 JavaScript代码 //如果提供了 ...