一、集合

1.集合的创建

  1. set1 = set({1,2,'barry'})
  2. set2 = {1,2,'barry'}
  3. print(set1,type(set1))
  4. print(set2,type(set2))
  5. 结果:{1, 2, 'barry'} <class 'set'>
  6. {1, 2, 'barry'} <class 'set'>

2.集合的增

  2.1直接增加

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.add('女神')
  3. print(set1) #增加,无序的。
  4. 结果:{'ritian', 'alex', 'egon', '女神', 'wusir', 'barry'}

  2.2迭代增加

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.update('A')
  3. print(set1)
  4. set1.update('老师')
  5. print(set1)
  6. set1.update([1,2,3])
  7. print(set1)
  8. 结果:{'egon', 'alex', 'ritian', 'wusir', 'A', 'barry'}
  9. {'egon', '老', 'alex', 'ritian', 'wusir', 'A', '师', 'barry'}
  10. {'egon', '老', 1, 2, 3, 'alex', 'ritian', 'wusir', 'A', '师', 'barry'}

3.集合的减

  3.1 .remove('元素')

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.remove('alex') #删除一个元素
  3. print(set1)
  4. 结果:{'wusir', 'ritian', 'barry', 'egon'}

  3.2 .pop()

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.pop() #随机删除一个元素
  3. print(set1)
  4. 结果:{'alex', 'ritian', 'wusir', 'egon'}

  3.3 .clear()

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.clear() #清空集合
  3. print(set1)
  4. 结果:set()

  3.4 del

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. del set1 #删除集合,会报错
  3. print(set1)
  4. 结果:报错

4.集合的其他玩法

  4.1交集 (& 或者 intersection)

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8}
  3. print(set1 & set2)
  4. print(set1.intersection(set2))
  5. 结果:{4, 5}
  6. {4, 5}

  4.2并集 (| 或者 union)

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8}
  3. print(set1 | set2)
  4. print(set1.union(set2))
  5. 结果:{1, 2, 3, 4, 5, 6, 7, 8}
  6. {1, 2, 3, 4, 5, 6, 7, 8}

  4.3差集 (- 或difference)

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8}
  3. print(set{1, 2, 3}1 - set2)
  4. print(set1.difference(set2))
  5. 结果:{1, 2, 3}
  6. {1, 2, 3}

  4.4反交集(^ 或者 symmetric_difference)

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8}
  3. print(set1 ^ set2)
  4. print(set1.symmetric_difference(set2))
  5. 结果:{1, 2, 3, 6, 7, 8}
  6. {1, 2, 3, 6, 7, 8}

  4.5子集与超集(< 或者 issubset)

  1. set1 = {1,2,3}
  2. set2 = {1,2,3,4,5,6}
  3. print(set1 < set2)
  4. print(set1.issubset(set2))
  5. 结果:True
  6. True
  7.  
  8. print(set2 > set1)
  9. print(set2.issuperset(set1))
  10. 结果:True
  11. True

5. frozenset不可变集合,让集合变成不可变类型。

  1. s = frozenset('barry')
  2. print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

二、深浅copy

1.先看赋值运算。

  1. l1 = [1,2,3,['barry','alex']]
  2. l2 = l1
  3.  
  4. l1[0] = 111
  5. print(l1) # [111, 2, 3, ['barry', 'alex']]
  6. print(l2) # [111, 2, 3, ['barry', 'alex']]
  7.  
  8. l1[3][0] = 'wusir'
  9. print(l1) # [111, 2, 3, ['wusir', 'alex']]
  10. print(l2) # [111, 2, 3, ['wusir', 'alex']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

2.浅copy

  1. l1 = [1,2,3,['barry','alex']]
  2.  
  3. l2 = l1.copy()
  4. print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
  5. print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
  6. l1[1] = 222
  7. print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
  8. print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
  9.  
  10. l1[3][0] = 'wusir'
  11. print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
  12. print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

3.深deepcopy

  1. import copy
  2. l1 = [1,2,3,['barry','alex']]
  3. l2 = copy.deepcopy(l1)
  4.  
  5. print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
  6. print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
  7.  
  8. l1[1] = 222
  9. print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
  10. print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
  11.  
  12. l1[3][0] = 'wusir'
  13. print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
  14. print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

集合 (set) 的增删改查及 copy()方法的更多相关文章

  1. Python笔记·第六章——集合 (set) 的增删改查及 copy()方法

    简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 1.去重,把一个列表变成集合,就自动去重了. ...

  2. Python笔记·第五章—— 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  3. 用DBContext (EF) 实现通用增删改查的REST方法

    我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...

  4. 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  5. hibernate实现增删改查的各种方法

    1>接口(主要是增删改查的接口)BaseDao.java /** * * @author fly.zhou */ public interface IBaseDao { //增加对应实体的一条记 ...

  6. linux的sed(增删改查)使用方法

    sed的增删改查的基本操作 参考:https://www.cnblogs.com/0zcl/p/6855740.html 01:增(a) 2个sed命令,分别是:(这些操作都是在内存中进行的,所以不会 ...

  7. java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,

    1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...

  8. mongodb 集合操作 (增删改查)

    1.插入: 使用insert或save方法想目标集合插入一个文档: db.person.insert({"name":"ryan","age" ...

  9. 字典 (dict) 的增删改查及其他方法

    一.字典 1.字典简介: 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无 ...

随机推荐

  1. CRL快速开发框架升级到4.52,谈谈开发过程中的优化

    CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...

  2. 9.python面向对象编程

    面向对象的几个核心特性如下 Class 类一个类即是对一类拥有相同属性的对象的抽象.蓝图.原型.在类中定义了这些对象的都具备的属性(variables(data)).共同的方法 Object 对象 一 ...

  3. SQL 杂活

    例子一:查询两个表数据并且分页展示 select * from ( select ROW_NUMBER() OVER(order by CreateTime desc) as rownum,* fro ...

  4. Python环境以及编辑器

    1.Python环境搭建 http://blog.csdn.net/qq_29663071/article/details/70158204 备注:a.个人感觉 安装路径为自己选择的 位置和特性 b. ...

  5. 为什么epoll会那么高效

    参考(原文简直超赞):https://zhidao.baidu.com/question/687563051895364284.html下面是我结合原文写的,为了便于自己理解:关于阻塞和非阻塞的理解可 ...

  6. 关于foo的一个面试题

    今天看到一个关于foo的一个面试题,赶脚特别有意思 function foo(){// 第16行 getName = function(){console.log(1)} return this } ...

  7. 第二节 安装CentOS

    Linux 第二节一.安装VNware workstation 10二.安装CentOS 1.root/123456 用户登录[root@localhost ~]# 2.关机 init 0 3.ifc ...

  8. ArrayList中对象 排序

    public class Student implements Comparable { private String studentname; public int studentage; publ ...

  9. ab返回结果参数分析

    Server Software    返回的第一次成功的服务器响应的HTTP头.Server Hostname    命令行中给出的域名或IP地址Server Port    命令行中给出端口.如果没 ...

  10. js 停止事件冒泡 阻止浏览器的默认行为(阻止a标签跳转 )

    在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到"停止事件冒泡"和"阻止浏览器默认行为". 1..停止事件冒泡 JavaScript代码 //如果提供了 ...