python之集合,深浅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)

执行输出:

{'wusir', 'egon', 'alex', 'ritian', 'barry', '景女神'}
{'wusir', 'A', 'egon', 'alex', 'ritian', 'barry', '景女神'}
{'老', 'wusir', 'A', 'egon', 'alex', 'ritian', 'barry', '师', '景女神'}
{'老', 'wusir', 1, 2, 3, 'A', 'egon', 'alex', 'ritian', 'barry', '师', '景女神'}

3,集合的删。

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex') # 删除一个元素
print(set1) set1.pop() # 随机删除一个元素
print(set1) set1.clear() # 清空集合
print(set1) del set1 # 删除集合

执行输出

{'ritian', 'wusir', 'egon', 'barry'}
{'wusir', 'egon', 'barry'}
set()

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(set2.union(set1))

执行输出

{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(set1 - 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子集与超集

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({'b', 'a', 'r', 'y'}) <class 'frozenset'>

二,深浅copy
1,先看赋值运算。

l1 = [1,2,3,['barry','alex']]
l2 = l1 l1[0] = 111
print(l1)
print(l2) l1[3][0] = 'wusir'
print(l1)
print(l2)

执行输出:

[111, 2, 3, ['barry', 'alex']]
[111, 2, 3, ['barry', 'alex']]
[111, 2, 3, ['wusir', 'alex']]
[111, 2, 3, ['wusir', 'alex']]

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

2,浅拷贝copy。

l1 = [1,2,3,['barry','alex']]

l2 = l1.copy()
print(l1,id(l1))
print(l2,id(l2))
l1[1] = 222
print(l1,id(l1))
print(l2,id(l2)) l1[3][0] = 'wusir'
print(l1,id(l1[3]))
print(l2,id(l2[3]))

执行输出

[1, 2, 3, ['barry', 'alex']] 2200143751176
[1, 2, 3, ['barry', 'alex']] 2200143750920
[1, 222, 3, ['barry', 'alex']] 2200143751176
[1, 2, 3, ['barry', 'alex']] 2200143750920
[1, 222, 3, ['wusir', 'alex']] 2200143749768
[1, 2, 3, ['wusir', 'alex']] 2200143749768

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

3,深拷贝deepcopy。

import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1) print(l1,id(l1))
print(l2,id(l2)) l1[1] = 222
print(l1,id(l1))
print(l2,id(l2)) l1[3][0] = 'wusir'
print(l1,id(l1[3]))
print(l2,id(l2[3]))

执行输出

[1, 2, 3, ['barry', 'alex']] 1722671719688
[1, 2, 3, ['barry', 'alex']] 1722671719816
[1, 222, 3, ['barry', 'alex']] 1722671719688
[1, 2, 3, ['barry', 'alex']] 1722671719816
[1, 222, 3, ['wusir', 'alex']] 1722671720456
[1, 2, 3, ['barry', 'alex']] 1722671720200

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

python 全栈开发,Day3的更多相关文章

  1. Python全栈开发day3

    1.Pycharm使用介绍 1.1 新建py文件自动添加python和编码 1.2 更改pycharm默认字体和风格 点击左上角“file”-->“Settings”(或者用“Ctrl+Alt+ ...

  2. python全栈开发-Day3 字符串

    python全栈开发-Day3 字符串 一.按照以下几个点展开字符串的学习  #一:基本使用 1. 用途 #首先字符串主要作用途径:名字,性别,国籍,地址等描述信息2.定义方式 在单引号\双引号\三引 ...

  3. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  4. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  5. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  6. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  7. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  8. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  9. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. python+flask:实现POST接口功能

    1.首先需要安装python和flask,这个是必须的嘛. 2.我们这里实现的是一个POST功能的简单接口. from flask import Flask, request, jsonify imp ...

  2. SQL总结手册

    1.SQL语法 (1)查询 SQL查询是使用最多的,需要凭借结构.索引和字段类型等因素.大多数据库含有一个优化器(optimizer),把用户查询转换为可选形式,以提高查询效率. 基本语法为: SEL ...

  3. 获得某个月的天数(java, mysql, oracle)

    java方式: Calendar   cal   =   Calendar.getInstance(); cal.set(Calendar.YEAR,year); cal.set(Calendar.M ...

  4. GitHub上最火的Android开源项目整理

    这篇文章介绍GitHub上另外34个非常受欢迎的Android开源项目,在这些项目中,你又在用或用过哪些呢? 41. android-swipelistview SwipeListView是一个And ...

  5. R语言︱画图

    笔者寄语:不论画啥,你先plot准没错. plot 二维坐标绘图 dotchart 点图 barplot 条形图 hist 直方图 pie 饼图 points 添加点 lines 添加线 text 添 ...

  6. freemarker报错之五

    1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Lexical e ...

  7. Linux系统挂载NTFS文件系统

     今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其他同学们会有类似经历,于是尽量细致的记录于此.     无论是一块安装了Windows/Linu ...

  8. PC响应式、固宽布局思想

    截止目前,国内绝大多数内容为主的网站(知乎,果壳,V2EX,网易新闻等)均使用内容区定宽布局,大多数电商网站(网易考拉,京东,聚美优品)也使用了内容区定宽的布局,也有些网站使用了自适应布局. 如果不明 ...

  9. C# 图解教程 第一章 C#和.NET框架

    C#和.NET框架 在.NET之前.NET时代 .NET框架的组成大大改进的编程环境 编译成CIL编译成本机代码并执行CLR Common Language RuntimeCLI Common Lan ...

  10. CSS3 column属性

    css3 column属性的应用 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta c ...