集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

1,集合的创建。

  1. set1 = set({1,2,'barry'})
  2. set2 = {1,2,'barry'}
  3. print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}

2,集合的增。

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2. set1.add('景女神')
  3. print(set1)
  4.  
  5. #update:迭代着增加
  6. set1.update('A')
  7. print(set1)
  8. set1.update('老师')
  9. print(set1)
  10. set1.update([1,2,3])
  11. print(set1)

3,集合的删。

  1. set1 = {'alex','wusir','ritian','egon','barry'}
  2.  
  3. set1.remove('alex') # 删除一个元素
  4. print(set1)
  5.  
  6. set1.pop() # 随机删除一个元素
  7. print(set1)
  8.  
  9. set1.clear() # 清空集合
  10. print(set1)
  11.  
  12. del set1 # 删除集合
  13. print(set1)

4,集合的其他操作:

  4.1 交集。(&  或者 intersection)

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

  4.2 并集。(| 或者 union)

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8}
  3. print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}
  4.  
  5. print(set2.union(set1)) # {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(set1 - set2) # {1, 2, 3}
  4. print(set1.difference(set2)) # {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) # {1, 2, 3, 6, 7, 8}
  4. print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}

  4.5子集与超集

  1. set1 = {1,2,3}
  2. set2 = {1,2,3,4,5,6}
  3.  
  4. print(set1 < set2)
  5. print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
  6.  
  7. print(set2 > set1)
  8. print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。

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. l2 = l1.copy()
  3. print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
  4. print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
  1. l1[1] = 222
    print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
    print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
  1. l1[3][0] = 'wusir'
  2. print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
  3. 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来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

Day5 集合的深浅copy的更多相关文章

  1. python之集合,深浅copy

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

  2. python之数据类型补充、集合、深浅copy

    一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...

  3. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  4. Python学习之路基础篇--07Python基础+编码、集合 和 深浅Copy

    1 小数据池(节省内存) 只有数字和字符串中内存,储存在同一个内存地址中 数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了 2 编 ...

  5. python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy

    1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...

  6. python-基础数据类型,集合及深浅copy

    一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...

  7. 基础数据类型的坑和集合及深浅copy

    一.基础数据类型的坑: 元组: 如果一个元组中,只有一个元素,且没有逗号,则该"元组"与里面的数据的类型相同. # 只有一个数据,且没有逗号的情况: print(tu1,type( ...

  8. 数据结构中的列表、元组、字典、集合 ,深浅copy

    数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...

  9. 集合、深浅copy

    集合set: 集合也和列表数组一样有增加,但是集合是真正的没有顺序的  所以集合无法查找的,并且集合的外观你看着好像是字典和列表的组合,因为它是用字典的括号一样 ,但是又是里面并没有键值对  只是一个 ...

随机推荐

  1. 剖析JSONP原理的小例子

    1. 服务器端代码(Node.js) // 导入 http 内置模块 const http = require('http'); // 这个核心模块,能够帮我们解析 URL地址,从而拿到 pathna ...

  2. css 3d旋转

  3. 使用AnimatorOverrideController动态更换animationclip注意事项

    http://www.ceeger.com/forum/read.php?tid=19138 public AnimationClip clip; Animator anim; void Awake( ...

  4. CF960G Bandit Blues(第一类斯特林数)

    传送门 可以去看看litble巨巨关于第一类斯特林数的总结 设\(f(i,j)\)为\(i\)个数的排列中有\(j\)个数是前缀最大数的方案数,枚举最小的数的位置,则有递推式\(f(i,j)=f(i- ...

  5. [Xcode 实际操作]八、网络与多线程-(19)使用RunLoop使PerformSelector方法延迟动作的执行

    目录:[Swift]Xcode实际操作 本文将演示使用RunLoop使PerformSelector方法延迟动作的执行. 在项目导航区,打开视图控制器的代码文件[ViewController.swif ...

  6. C 语言实例 - 矩阵转换

    C 语言实例 - 矩阵转换 C 语言实例 C 语言实例 矩阵转换. 实例 #include <stdio.h> int main() { ][], transpose[][], r, c, ...

  7. dubbo-springboot

    一.服务提供者boot-user-service-provider 服务提供者boot-user-service-provider代码结构如下: 1.服务提供者boot-user-service-pr ...

  8. attribute与property区别总结

    在前阵子看JQuery源码中,attr()的简单理解是调用了element.getAttribute()和element.setAttribute()方法,removeAttr()简单而言是调用ele ...

  9. FXP登录Linux报错

    1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...

  10. WPF学习04:2D绘图 使用Shape绘基本图形

    我们将使用Shape进行基本图形绘制. 例子 一个可移动的矩形方框: XAML代码: <Window x:Class="Shape.MainWindow" xmlns=&qu ...