一、深浅拷贝

1.  值拷贝 ls1 = ls2  不开辟空间,指针跟着走。(直接将ls1中存放的地址拿过来,内存中不会开辟新的空间,所以你怎么变,我也跟着变。)(ls1内部的所有类型的值发生改变,ls2都不会随之变化)

2.  浅拷贝 ls3 = ls1.copy()  ls3新开辟空间,但数据内里面每个元素的地址同ls1。所以ls1中不可变类型变了,相当于ls1重新指到了一个新的地址,ls3还指向原来的那个地址。如果s1中可变类型的值变了,因为地址没变,只是值变了。所以ls3中可变类型的值也会一起变。(ls1内部的可变类型值发生改变,ls3会随之变化)

3. 深copy :ls4 = deepcopy(ls1)   ls4中所有的数据都会重新开辟一个全新的空间,由于有优化机制,所以不可变类型会指向同一个地址。又由于不可

变类型值变了,地址一定会变,所以 deepcopy从内致外都不会受s1的影响,你怎么变跟我没关系。(ls1内部的所有类型的值发生改变,ls4都不会随之变化)

二、数据用法:   元组、字典、集合set

元组: 可理解为不可变列表

1.值可以为任意类型

2. 可以存放多个值------可以进行成员运算

3. 可以存放重复的值 - 可以计算成员出现的次数

4. 有序存储 - 可以通过索引取值,可以切片

常用操作:1. 索引取值,正反取:print(t1[1], print(t1[-3])

2. 运算(拼接),print((1, 2) + (2, 3))

3. 长度 len(t1)

4. 切片 print((2, 1, 3)[::-1])

5. 成员运算 print(True in t1);  print(False in t1)  # False == 0, t1中如果有0或False,该结果都是True

6. for循环 for obj in t1: print(obj, end=" ")

方法: count :  print(t1.count(0))  # 对象0在元组中出现的次数;

index:   print(t1.index(123, 4, len(t1))) # 对象123在区间4~末尾第一次出现的索引

字典相关  概念 :容器(集合):存放多个值的变量

单列容器(系统中的单列容器很多):list | tuple

双列容器(map):只有dict,存放数据 成对出现,dict存放数据采用 key-value键值对方式

字典中的key必须为不可变类型,因为key是取value的唯一依据,key一旦被确定,就不能被改变,所以只能是不可变类型

字典中的value可以为任意类型,value是用来存放世间所有存在的数据

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

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

字典的定义:1.空字典{}、2.用map映射创建字典d3 = dict({'a': 1, 'b': 1})、

3.用关键字赋值方式:d4 = dict(name='Bob', age=18)  # 参数=左侧的名字就是合法的变量名,都会被转化为字符串形式的key

4. 创建有多个key值采用默认值的方式: 默认值不写默认None,也可以自定义value:d5 = {}.fromkeys('abc', 0)---返回一个新字典。

字典的操作  增/改: 字典名[key] = 值 => key已存在就是修改值,不存在就是新增值:dic['c'] = 3

查:字典名[key]:只能查找已有的key,没有崩溃,

引入   dict.get(key, default =None)       key -- 字典中要查找的键     default -- 如果指定键的值不存在时,返回该默认值.

清空 dic.clear()

pop(k):删除指定key的value并返还删除的value  :res = dic.pop('a')

从dic末尾删除,返还(key, value)形成的元组: res = dic.popitem()

其他方法:  1.更新 dic.update(d)  原字典中,有相同的键,value就以新的 覆盖,没有键,就新增进去,原字典中多出来的就保留。----将一个字典添加到另一字典中

2.带默认值的新增 dic.setdefault('z', 100): 新增key,key已有,啥事不干,没有添加key,及value

3.字典的循环: for 得到key

4. 循环keys  效用等同for: for k in dic.keys()

5. 循环values :  for v in dic.values()

6. 同时循环key和value 得到(key, value) :  for res in dic.items()

7. 重点:for k, v in dic.items()  得到key, value  等同解压赋值

集合类型  空集合:不能用{},因为用来标示空字典,表示形式 :s = set()

定义:1.set为可变类型 - 可增可删  2. set自带去重存储 - set中不能存放重复数据

3. set为无序存储 - 不能索引取值

4. set为单列容器 - 没有取值的key-----不能取值

方法:1.增  s.add('1')

2. s.update({'2', '3'}) ,有就什么都不干,没有就新增

3. 合集:两个的合体 |    print(py | Lx) 、  print(py.union(lx))

4. 对称交集 抛出共有的合体 ^ : print(py ^ lx)、print(py.symmetric_difference(lx))

5. 差集:独有的 print(py.difference(lx))----相当于减法

6. 比较 :前提一定是包含关系:s1 = {'1', '2'}  ; s2 = {'2'}   ;print(s1 < s2)

python学习Day6 元组、字典、集合set三类数据用法、深浅拷贝的更多相关文章

  1. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  2. **python中列表 元组 字典 集合

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...

  3. Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207【all】

    1.列表 2.元组 3.字典 4.字符串 5.set集合 6.深浅拷贝

  4. Python入门基础学习(列表/元组/字典/集合)

    Python基础学习笔记(二) 列表list---[ ](打了激素的数组,可以放入混合类型) list1 = [1,2,'请多指教',0.5] 公共的功能: len(list1) #/获取元素 lis ...

  5. python 中列表 元组 字典 集合的区别

    先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...

  6. python的列表元组字典集合比较

    定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'],7- ...

  7. Python学习-列表元组字典操作

    一.列表 列表是Python的基本数据类型之一,它是以 [] 括起来的,内部成员用逗号隔开.里面可以存放各种数据类型. # 例如: list2 = ['jason', 2, (1, 3), ['war ...

  8. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  9. python学习6—数据类型之集合与字符串格式化

    python学习6—数据类型之集合与字符串格式化 1. 使用id()可以查看一个变量的内存地址: name = 'alex' id(name) 2. 进制转换 十进制转换为二进制等: a = 10 # ...

随机推荐

  1. Btrace介绍

    一.Btrace简介 BTrace可以动态的向目标应用程序的字节码注入追踪代码 用到的技术JavaComplierApi,JVMTI,Agent,Instrumentation+ASM 二.Btrac ...

  2. python安装media报错

    Try https://pypi.python.org/pypi/setuptools easy_install LEE 我后来,依次在Python2.7中装了 numpy-1.7.0-win32-s ...

  3. 新建服务器出现错误 Peer authentication failed for user "postgres" 的解决办法

    用pgadmin3 新建服务器出现错误 Peer authentication failed for user "postgres" 在stackoverflow上找到答案,出现此 ...

  4. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  5. java 乱码问题集

    场景1:刚复制来的java类乱码,反复修改无果 解:将java类用NotePat++打开,可正常显示,复制过来即可.

  6. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  7. Centos7之系统优化

    优化条目: 修改ip地址.网关.主机名.DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...

  8. ubuntu10.04换官方源

    ubuntu10.04LTS官方已经不再维护,导致部分软件.库文件等下载有问题,可换以下源地址解决问题 deb http://old-releases.ubuntu.com/ubuntu lucid ...

  9. hashcode()和equals()

    一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实 ...

  10. Comparator与Comparable,自定义排序和类比较器,TreeSet对象排序

    /** * 学生类 * @author Administrator * */ public class Student { private String sno ; private String sn ...