Day5 集合的深浅copy
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
去重,把一个列表变成集合,就自动去重了。
关系测试,测试两组数据之前的交集、差集、并集等关系。
1,集合的创建。
- set1 = set({1,2,'barry'})
- set2 = {1,2,'barry'}
- print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}
2,集合的增。

- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.add('景女神')
- print(set1)
- #update:迭代着增加
- set1.update('A')
- print(set1)
- set1.update('老师')
- print(set1)
- set1.update([1,2,3])
- print(set1)

3,集合的删。

- set1 = {'alex','wusir','ritian','egon','barry'}
- set1.remove('alex') # 删除一个元素
- print(set1)
- set1.pop() # 随机删除一个元素
- print(set1)
- set1.clear() # 清空集合
- print(set1)
- del set1 # 删除集合
- print(set1)

4,集合的其他操作:
4.1 交集。(& 或者 intersection)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 & set2) # {4, 5}
- print(set1.intersection(set2)) # {4, 5}
4.2 并集。(| 或者 union)

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

4.3 差集。(- 或者 difference)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 - set2) # {1, 2, 3}
- print(set1.difference(set2)) # {1, 2, 3}
4.4反交集。 (^ 或者 symmetric_difference)
- set1 = {1,2,3,4,5}
- set2 = {4,5,6,7,8}
- print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
- print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
4.5子集与超集

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

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来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
Day5 集合的深浅copy的更多相关文章
- python之集合,深浅copy
一. 集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- python之数据类型补充、集合、深浅copy
一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...
- day 07 数据类型,集合,深浅copy
1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...
- Python学习之路基础篇--07Python基础+编码、集合 和 深浅Copy
1 小数据池(节省内存) 只有数字和字符串中内存,储存在同一个内存地址中 数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了 2 编 ...
- python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy
1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...
- python-基础数据类型,集合及深浅copy
一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...
- 基础数据类型的坑和集合及深浅copy
一.基础数据类型的坑: 元组: 如果一个元组中,只有一个元素,且没有逗号,则该"元组"与里面的数据的类型相同. # 只有一个数据,且没有逗号的情况: print(tu1,type( ...
- 数据结构中的列表、元组、字典、集合 ,深浅copy
数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...
- 集合、深浅copy
集合set: 集合也和列表数组一样有增加,但是集合是真正的没有顺序的 所以集合无法查找的,并且集合的外观你看着好像是字典和列表的组合,因为它是用字典的括号一样 ,但是又是里面并没有键值对 只是一个 ...
随机推荐
- 剖析JSONP原理的小例子
1. 服务器端代码(Node.js) // 导入 http 内置模块 const http = require('http'); // 这个核心模块,能够帮我们解析 URL地址,从而拿到 pathna ...
- css 3d旋转
- 使用AnimatorOverrideController动态更换animationclip注意事项
http://www.ceeger.com/forum/read.php?tid=19138 public AnimationClip clip; Animator anim; void Awake( ...
- CF960G Bandit Blues(第一类斯特林数)
传送门 可以去看看litble巨巨关于第一类斯特林数的总结 设\(f(i,j)\)为\(i\)个数的排列中有\(j\)个数是前缀最大数的方案数,枚举最小的数的位置,则有递推式\(f(i,j)=f(i- ...
- [Xcode 实际操作]八、网络与多线程-(19)使用RunLoop使PerformSelector方法延迟动作的执行
目录:[Swift]Xcode实际操作 本文将演示使用RunLoop使PerformSelector方法延迟动作的执行. 在项目导航区,打开视图控制器的代码文件[ViewController.swif ...
- C 语言实例 - 矩阵转换
C 语言实例 - 矩阵转换 C 语言实例 C 语言实例 矩阵转换. 实例 #include <stdio.h> int main() { ][], transpose[][], r, c, ...
- dubbo-springboot
一.服务提供者boot-user-service-provider 服务提供者boot-user-service-provider代码结构如下: 1.服务提供者boot-user-service-pr ...
- attribute与property区别总结
在前阵子看JQuery源码中,attr()的简单理解是调用了element.getAttribute()和element.setAttribute()方法,removeAttr()简单而言是调用ele ...
- FXP登录Linux报错
1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...
- WPF学习04:2D绘图 使用Shape绘基本图形
我们将使用Shape进行基本图形绘制. 例子 一个可移动的矩形方框: XAML代码: <Window x:Class="Shape.MainWindow" xmlns=&qu ...