深浅拷贝,元祖,字典 ,集合的定义以及基本操作方法

深浅拷贝

# 值拷贝:应用场景最多
​值拷贝:
先创建一个列表
ls = [1, 'abc', [10]]
再定义 ls1 = ls  此处ls1会直接将ls中在栈区存放的地址拿过来,也就是列表的门牌号,
所以在 ls 当列表内部的元素发生变化,ls1都会随之变化,因为值拷贝指挥把存储列表的地址拿过来,并不能把值的地址拿过来 ​浅拷贝:
再定义 ls2 = ls.copy()  使用copy()元素,它会早内存中开辟新列表的空间,但列表中的值地址都是直接从ls列表中拿过来的
所以 ls 内部的不可改变类型的元素地址不会改变,而可变类型元素发生改变,ls2中存放的值会随之变化
​深拷贝:
再定义 ls3 = deepcopy(ls)  使用deepcopy()元素, 它会在内存中开辟新的列表空间,ls列表中的不可变类型的地址直接拿过来(优化机制),而可变类型的元素地址会重新开辟新的空间,
当 ls 内部的所有类型的值发生改变,ls3都不会随之变化

元组类型

'''
元组:可以理解为不可变的列表
# 1.值可以为任意类型
# 2.可以存放多个值 - 可以进行成员运算
# 3.可以存放重复的值 - 可以计算成员出现的次数
# 4.有序存储 - 可以通过索引取值,可以切片
'''
# 常用操作
# 1.索引取值
tuple = (1,2,3,4,5)
print(tuple[1],type(tuple[1]))
print(tuple[-3],type(tuple[-3]))
# 2.运算(拼接)
tuple = (1,2,3,4,5)
tuple1 = (5,7,8,9,10)
print(tuple + tuple1)

# 3.长度
tuple = (1,2,3,4,5)
print(len(tuple))
# 4.切片
tuple = (1,2,3,4,5)
print(tuple[1:5:1])
)

# 5.成员运算
tuple = (1,2,3,4,5)
print(1 in tuple) # 判断 1 是不是在 tuple 中,返回bool
print(1 not in tuple) # 判断 1 是不是不在tuple中 返回bool

# 6.for循环
tuple = (1,2,3,4,5)
for i in tuple:
print(i,end = '')
print()


# 方法
tuple = (1,2,3,4,5)
print(tuple.count(5)) # 对象5在tuple元组中出现的次数

tuple = (1,2,3,4,5)
print(tuple.index(3,1,len(tuple))) # 对象3在元组内 从1号位至末尾,第一次出现的索引,此处返还 2

字典类型

字典相关概念

# 容器(集合):存放多个值的变量
# 单列容器(系统中的单列容器很多):list | tuple
# 双列容器(map):只有dict,存放数据 成对出现,dict存放数据采用 key-value键值对方式


# 字典中的key可以为什么类型:key必须为不可变类型
#       -- key是取value的唯一依据,key一旦被确定,就需要唯一确定(不能被改变)
# 字典中的value可以为什么类型:value可以为任意类型
#       -- value是用来存放世间所有存在的数据

# key要确保唯一性,不能重复,值可以重复,并且可以被改变 => 字典为可变类型

dic = {'a': 10, 1: 20, True: 30, (): 40}  # 1和True都是1,key具有唯一性,所以只保留最后一次值
print(dic)  # {'a': 10, 1: 30, (): 40}

字典的定义

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,  英文名称 dict ,格式如下所示:

d = {key1 : value1, key2 : value2 }

不允许同一个key出现两次。创建时如果同一个key被赋值两次,后一个值会被记住,key的命名与变量名的命名一样

而value值它可以为任意类型的值

# 空字典
d1 = {}
d2 = dict()
# 用map映射创建字典
d3 = dict({'a': 1, 'b': 1})
print(d3)
# 用关键字赋值方式
d4 = dict(name='Bob', age=18)  # 参数=左侧的名字就是合法的变量名,都会被转化为字符串形式的key
print(d4)
# 创建有多个key值采用默认值的方式: 默认值不写默认None,也可以自定义
d5 = {}.fromkeys('abc', 0)
print(d5)

字典的操作

dic = {'a': 1, 'b': 2}
print(dic)

# 增: 字典名[key] = 值 => key已存在就是修改值,不存在就是新增值
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
dic['e'] = 5 # 直接把需要添加的key放入[]中 等号后面放value
print(dic)
# 改
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
dic['d'] = 5 # 此处把 ' d ' 对应的value 改成了 5 ,方法与添加一样
print(dic)
# 查:字典名[key]
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
print(dic['d']) 此处查询key 'd',返回’d'的value, 它只能查找已有的key,没有会崩溃(报错)

有默认值的查询:如果字典中有所查询的key,那么他会取出对应value,如果没有找到key,他会报错,可以用get()来获取,如果没有找到,他会返还默认值,默认值可以自定义
dic = {'a':1,'b':2,'c':3,}
print(dic.get('d', '未找到')) 此处使用get(),此处并没有'd'这个key,他会返回一个None,如果设定了默认值就返回默认值,此处默认值为 '未找到'

# 删
dic = {'a':3,'b':4,'c':5}
print(dic.clear()) # 清空整个字典,返回值为None
# pop(k)删除指定key的value并返还删除的value
dic = {'a':3,'b':4,'c':5}
print(dic.pop('a')) #此处删除了 'a' ,打印它会返回删除的value
print(dic) # 再次打印不会出现key 'a' 了
# dic = dic.pop('a')
print(dic)
# 从dic末尾删除,返还(key, value)形成的元组
dic = {'a':3,'b':4,'c':5}
dic = dic.popitem() #使用 popitem() 从末尾删除 key和value
print(dic) # 打印后返回(key,value)形成的元祖


# 其他方法
# 更新字典: a有值覆盖,c没被新操作,带下来,b为新增,增加并赋值
dic = {'a': 1, 'c': 2}
d = {'a': 10, 'b': 20}
dic.update(d)
print(dic)  # {'a': 10, 'c': 2, 'b': 20}

# 带默认值的新增: 新增key,key已有,啥事不干,没有添加key,值就是第二个参数
setdefault() 方法和 get()方法 类似, 如果key不已经存在于字典中,将会添加key并将value设为默认值。
dic = {'a':3,'b':4,'c':5}
print(dic.setdefault('d','未找到'))


# 字典的循环
# 1.直接循环,就是循环得到key
dic = {'a':1,'b':2,'c':3}
for i in dic: #直接for 循环
print(i) # 此处输出结果为 a,b,c 得到 key
# 2.循环keys
dic = {'a':1,'b':2,'c':3}
print(dic.keys()) # 输出结果为 dict_keys(['a', 'b', 'c']) dic = {'a':1,'b':2,'c':3}
for i in dic.keys(): #for 循环keys()
  print(i) # 输出结果为 a,b,c
# 3.循环values
dic = {'a':1,'b':2,'c':3}
print(dic.values()) # 输出的结果为dict_values([1, 2, 3])
dic = {'a':1,'b':2,'c':3}
for i in dic.values():
print(i) # 输出结果为 1,2,3
# 同时循环key和value (key, value)
dic = {'a':1,'b':2,'c':3}
print(dic.items()) #此处输出结果为dict_items([('a', 1), ('b', 2), ('c', 3)])
dic = {'a':1,'b':2,'c':3}
for i in dic.items():
  print(i) # 此处输出结果为(’a',1)('b',2)('c',3)
# 重点****
dic = {'a':1,'b':2,'c':3}
for k,v in dic.items(): # key ,和value一起循环
print(k,v) # 此处输出结果为 a 1 | b 2 | c 3


# 解压赋值
# a, _, _, b = (1, 2, 3, 4)

集合类型

定义空集合不能用 {} ,因为用来标示空字典的,我们定义空集合可以用set()
可以在括号里加(),从内部括号中传值。
s = set() # 空集合
s = set(('a','b','c'))
print(s, type(s))
如果 {} 中不存value,只存一个元素,# a = {'a','b','c'} 那么他就是一个合集,如果放入key + value那就是字典
# 概念:
# 1.set为可变类型 - 可增可删
# 2.set为去重存储 - set中不能存放重复数据
# 3.set为无序存储 - 不能索引取值
# 4.set为单列容器 - 没有取值的key
# 总结:set不能取值

# 增
a = set(('a','b'))
a.add('c')
print(a) # 使用add() 依次可以传入一个参数,无序添加(因为集合本无序) 用它自己和其他元素的并集更新一个集合:
a = set(('a','b'))
a.update('c','d','e','f')  # 直接添加默认只可合并可迭代对象(数字不可迭代)
print(a) # 无序
a = set((1,'b'))
a.update({'c',2}) # 如果需要合并数字,可以在括号中添加可以迭代的括号()[] {},
print(a) # 打印结果是合集 {2,'b','c',1} (也是无序排列)


# 删
a = set((1,'b'))
a = a.pop() # 删除并返回任意集合元素。如果集合为空,则引发KeyError(报错) pop()不接受人和参数设定
print(a)
 
a = set((1,'b'))
a.remove(1,) # remove()可以删除指定的值,但是每次只能指定一个值。而且指定的值必须在集合内,否则报错
print(a)
 
a = set((1,'b'))
a.clear() #从该集合中删除所有元素,返回空集合
print(a)



# set运算
# 交集:两个都有 &
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py & lx) # 算两个集合的交集,返还所求的相同的元素,此处为egon
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py.intersection(lx)) # intersection 的功能等同与 & 号


# 合集:两个的合体
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py | lx) # 将两个集合的并集作为一个新集合返回。(即任何一个集合中的所有元素。)
print(py.uinon(lx)) # union 效果等同与 | 号

# 对称交集:抛出共有的办法的合体 ^
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py ^ lx) # 将两个集合的对称 差分,转化为一个新的集合,(即恰好位于其中一个集合中的所有元素。)
# 理论上可以理解为转换为一个新集合,存放两个集合所有的值,但是因为集合去重效果,会把相同的值,只存放一个
print(py.symmetric_difference(lx))  # symmetric_difference 效果等同与 ^ 号


# 差集:独有的
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py - lx) # 返回 py 中与 lx不重复的值
print(py.difference(lx)) #difference 效果等同与 - 号
print(lx - py) # 返回 lx 中与 lx 不重复的值
print(lx.difference(py)) #difference 效果等同与 - 号

# 比较:前提一定是包含关系
子类与父类的比较
s1 = {'1', '2'}
s2 = {'2'} # s2 中的元素必须在s1中才可比较
print(s1 < s2) # 此处是False,因为s1 要大于s2

python第六天的更多相关文章

  1. Python第六天 类型转换

    Python第六天   类型转换 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Python第二天  变量  运算符与表达式  input()与raw_inp ...

  2. 孤荷凌寒自学python第六天 列表的嵌套与列表的主要方法

    孤荷凌寒自学python第六天 列表的嵌套与列表的主要方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步的语音笔记朗读:https://www.ximalaya.com/keji/1 ...

  3. python 第六天

    模块 包 我们可以同过包来避免与其它模块的命名冲突,例如,调用在外层 demo.py 调用 demoFile 文件夹中的demo.py 就可以通过 demo.demo 来调用 请注意,每一个包目录下面 ...

  4. python第六天函数,定义、调用、不带参函数、带参函数等

    在python定义函数需要用到的关键字是 def  xxxx():,这个关键字就是 defined 的缩写.具体看实例: >>> def hello(): print("你 ...

  5. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  6. 系统学习python第六天学习笔记

    1.补充 1.列表方法补充 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) sort,排序 v1 = [11,22 ...

  7. python第六天(元组、字典、集合)

    一.元组(tuple) 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要用来读 定义:与列表类型相比,只不过把[ ]换成() age=(11,22,33,44,55)prin ...

  8. 学习Python第六天

    今天我们讲讲数据类型中的集合,博客写得有点糙,后续应该要进行优化优化了........ 集合:无序,不重复的数据组合,主要作用:去重,把一个列表变成集合,就自动去重了 基本语法:S = {1}类型为集 ...

  9. Python 搭建环境踩过的那些坑

    实践出真知,学习 Python 第六天,准备开始尝试写一些 Python 的实例.之前学习过程主要是参照的 廖雪峰老师的教程.搭建环境的过程,被很多坑围绕着. 版本选择 版本选择 Python 3.5 ...

随机推荐

  1. 简单的C#实体映射 AutoMapper

    AutoMapper是对象到对象的映射工具.在完成映射规则之后,AutoMapper可以将源对象转换为目标对象. 要映射实体 public class SourceModel { public int ...

  2. php连接数据库,以及日期处理函数

    php连接数据库,以及日期处理函数 $conn=mysql_connect("10.0.10.0:0000","root","123456" ...

  3. iOS NFC

    #import <CoreNFC/CoreNFC.h> @interface ViewController ()<NFCNDEFReaderSessionDelegate> @ ...

  4. java加载properties文件的六中基本方式实现

    java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...

  5. Django入门之路

    Web框架开发-Django基础之web应用,Http协议 web框架开发-web框架简介,wsgiref模块,DIY一个web框架 web框架开发-Django简介 web框架开发-静态文件配置 w ...

  6. Rsync + sersync 实时同步备份

    一      Rsync + Sersync  实时同步介绍 1.Rsync 服务搭建介绍 云机上搭建Rsync server,在本地搭建Rsync Clinet. 2. Sersync 服务搭建介绍 ...

  7. ASP.NET Core部署在IIS上

    1.下载安装 Windows Server Hosting ,它的作用是,让IIS有反向代理功能(Asp.Net Core Module负责反向代理工作),将请求转发到 Kestrel 2.发布网站, ...

  8. 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading)

    前言 接下来会陆续详细讲解EF Core 2.1新特性,本节我们来讲讲EF Core 2.1新特性延迟加载,如果您用过EF 6.x就知道滥用延迟加载所带来的灾难,同时呢,对此深知的童鞋到了EF Cor ...

  9. 随心测试_软测基础_008<测试对象整体认识>

    关于:软件测试的整体认识,首先:认识:测试 对象     与  测试主体(人) 之间的关系 核心理解如下: 不同的测试对象,选取 不同的测试方法 软件项目的周期中:提出 需求 ——>软件实现—— ...

  10. QinQ 简介

    QinQ 是一种二层隧道协议,通过将用户的私网报文封装上外层 VLAN Tag,使其携带两层 VLAN Tag 穿越公网,从而为用户提供了一种比较简单的二层VPN隧道技术.QinQ 的实现方式可分为两 ...