1.  深浅拷贝

1.1  值拷贝

s1直接将ls中存放的地址拿过来
s1内部的值发生任何变化,s2都会随之变化

s1 = ['1','2','3','a']s2 = s1print(id(s1),id(s2))   #   1986703930376 1986703930376s1[2] = 'b'print(id(s1),id(s2))   #   1986703930376 1986703930376

1.2  浅拷贝

s2 = s1.copy()

新开辟列表空间,但列表中的地址都是直接从ls列表中拿来
s1内部的可变类型值发生改变,ls2会随之变化

s1 = ['1','2','3','a',['1','2']]s2 = s1.copy()s1[4][0] = 4print(s1,id(s1))   #  ['1', '2', '3', 'a', [4, '2']] 2143274411208print(s2,id(s2))   #  ['1', '2', '3', 'a', [4, '2']] 2143275228424


1.3  深拷贝

新开辟列表空间,s1列表中的不可变类型的地址直接拿过来,但是可变类型的地址一定重新开辟空间

from copy import deepcopys1 = ['1','2','3','a',['1','2']]s2 = deepcopy(s1)s1[4][0] = 4print(s1)    #  ['1', '2', '3', 'a', [4, '2']]print(s2)    #  ['1', '2', '3', 'a', ['1', '2']]


2.  元组类型

元组:可以理解为不可变的列表
1.值可以为任意类型
2.可以存放多个值 - 可以进行成员运算
3.可以存放重复的值 - 可以计算成员出现的次数
4.有序存储 - 可以通过索引取值,可以切片

2.1  元组的常用操作

2.1.1  索引取值

t = ('1','2','3','a')print(t[0])   #  1

2.1.2  运算(拼接)

t1 = ('1','2','3','a')t2 = (1,2,3)print(t1 + t2)   #  ('1', '2', '3', 'a', 1, 2, 3)

2.1.3  长度

t1 = ('1','2','3','a')print(len(t1))     #   4

2.1.4  切片

t1 = ('1','2','3','a')print(t1[::-1])    #    ('a', '3', '2', '1')

2.1.5  成员运算

t1 = ('1','2','3','a')print('c' in t1)   #   False

2.1.6  for循环

t1 = ('1','2','3','a')for k in t1:    print(k)

3.  字典类型

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

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

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

3.1  字典的操作(增删改查)

3.1.1 增

dic = {'a':1,'b':2,'c':3}dic['d'] = 4print(dic)   #   {'a': 1, 'b': 2, 'c': 3, 'd': 4}

3.1.2 改

dic = {'a':1,'b':2,'c':3}dic['b'] = '4'print(dic)    #   {'a': 1, 'b': '4', 'c': 3}

3.1.3 查

dic = {'a':1,'b':2,'c':3}print(dic['c'])    #   3

3.1.1 删

dic = {'a':1,'b':2,'c':3}print(dic.pop('a'))   #    1print(dic)            #    {'b': 2, 'c': 3}

3.2  字典的其他方法

3.2.1  更新:

dic = {'a':1,'b':2,'c':3}d = {'a':5,'d':10}dic.update(d)print(dic)    #    {'a': 5, 'b': 2, 'c': 3, 'd': 10}

3.2.2  带默认值的新增: 新增key,key已有,啥事不干,没有添加key,值就是第二个参数

dic = {'a':1,'b':2,'c':3}dic.setdefault('x')print(dic)    #    {'a': 1, 'b': 2, 'c': 3, 'x': None}dic.setdefault('y',100)print(dic)    #    {'a': 1, 'b': 2, 'c': 3, 'x': None, 'y': 100}

3.2.3  字典的循环

1.直接循环,就是循环得到keydic = {'a':1,'b':2,'c':3}for k in dic:    print(k,end=' ')    #    a b c 

2.循环keys
dic = {'a':1,'b':2,'c':3}for k in dic.keys():    print(k,end=' ')      #    a b c 

3.循环values
dic = {'a':1,'b':2,'c':3}print(dic.values())     #    dict_values([1, 2, 3])for k in dic.values():    print(k,end=' ')    #    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)])a, b = (1, 2)print(a, b)               #    1 2for res in dic.items():    print(res,end=' ')    #    ('a', 1) ('b', 2) ('c', 3) 

重点:
dic = {'a':1,'b':2,'c':3}for k,v in dic.items():    print(k,v)    # a 1    b 2     c 3  

4.  集合类型

4.1  概念:

概念:
1.set为可变类型 - 可增可删
2.set为去重存储 - set中不能存放重复数据
3.set为无序存储 - 不能索引取值
4.set为单列容器 - 没有取值的key
总结:set不能取值

4.2  集合的增删

4.2.1  增

s = {'1','2','3','a','b','c'}s.add('d')s.add('1')print(s)     #    {'b', '3', '2', 'c', 'd', '1', 'a'}
s = {'1','2','3','a','b','c'}s.update({'q','w','e'})print(s)     #    {'a', '2', 'q', '1', '3', 'c', 'w', 'e', 'b'}

4.2.1  删

s = {'1','2','3','a','b','c'}s.remove('1')print(s)    #    {'3', '2', 'a', 'b', 'c'}s.clear()print(s)    #    set()

4.3  集合的运算

交集:两个都有 &

s1 = {'1','2','3','a'}s2 = {'a','b','c','1','2'}print(s1 & s2)                #    {'a', '1', '2'}print(s1.intersection(s2))    #    {'a', '2', '1'}

合集:两个的合体 |

s1 = {'1','2','3','a'}  s2 = {'a','b','c','1','2'}print(s1 | s2)         #    {'1', '2', 'b', 'a', 'c', '3'}print(s1.union(s2))    #    {'1', '2', 'b', 'a', 'c', '3'}

对称交集:抛出共有的办法的合体 ^

s1 = {'1','2','3','a'}s2 = {'a','b','c','1','2'}print(s1 ^ s2)                      #    {'c', '3', 'b'}print(s1.symmetric_difference(s2))  #    {'c', '3', 'b'}

差集:独有的

s1 = {'1','2','3','a'}s2 = {'a','b','c','1','2'}print(s1 - s2)               #  {'3'}print(s1.difference(s2))     #  {'3'}

比较:前提一定是包含关系

s1 = {'1','2','3','a'}s2 = {'a','b','c','1','2'}s3 = {'1','2'}print(s1 > s2)   # Falseprint(s1 > s3)   # True

Python--day06(深浅拷贝、元组、字典、集合)的更多相关文章

  1. python 深浅拷贝 元组 字典 集合操作

    深浅拷贝 :值拷贝 :ls = [,,] res = ls 则print(res)就是[,,] 浅拷贝 :ls.copy() 深拷贝:ls3 = deepcopy(ls) # 新开辟列表空间,ls列表 ...

  2. Python 基础-python-列表-元组-字典-集合

    列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...

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

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

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

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

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

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

  6. python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作

    目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...

  7. Python原理 -- 深浅拷贝

    python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...

  8. 元组/字典/集合内置方法+简单哈希表(day07整理)

    目录 二十三.元组内置方法 二十四.字典数据类型 二十五 集合内置方法 二十五.数据类型总结 二十六.深浅拷贝 补充:散列表(哈希表) 二十三.元组内置方法 什么是元组:只可取,不可更改的列表 作用: ...

  9. python_列表——元组——字典——集合

    列表——元组——字典——集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...

  10. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

随机推荐

  1. leaflet 学习备忘

    leaflet 开源js地图工具.非常好用. leaflet参考:http://leafletjs.com/ 特性: 完全开源,可以基于不同的第三方瓦片生成地图. 基于原始GPS,无需转换 可创建离线 ...

  2. mpvue小程序开发之 集成第三方UI框架Vant Weapp UI

    集成进第三方的UI框架其实很简单 这里把vant-weapp的dist目录重命名为vant-weapp放在项目根目录的static文件夹下: 在src文件夹下,即我们写vue代码的位置,正在编写的页面 ...

  3. #Java学习之路——基础阶段二(第一篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  4. Kubernetes 笔记 09 DaemonSet 我是一只看门狗

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  5. Pycharm使用教程(四)-安装python依赖包(非常详细,非常实用)

    简介 在做python开发时,需要很多依赖包,如果已经安装pip,安装依赖包,可以通过命令行:没有安装的,也可以通过PyCharm安装. 具体安装步骤 1.在File->Setting,如图: ...

  6. .Net Webapi SignalR与微信小程序的交互

    .Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...

  7. 当代前端应该怎么写这个hello world?

    前言 大概16年的时候我们队react进行了简单的学习:从DOM操作看Vue&React的前端组件化,顺带补齐React的demo,当时我们只是站在框架角度在学习,随着近几年前端的变化,想写个 ...

  8. WebApiClient的SteeltoeOSS.Discovery扩展

    1 背景 从园子里看到一些朋友在某些项目开发中,选择的架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑,SteeltoeOSS.Discovery是dotnet和 ...

  9. 贝塞尔曲线控件 for .NET (EN)

    Conmajia 2012 Updated on Feb. 18, 2018 In Photoshop, there is a very powerful feature Curve Adjust, ...

  10. asp.net mvc前台显示带htm标签的解决办法(Razor —@Html.Raw())

    数据是从后台富文本编辑后丢在数据库后取出的,不加Html.Raw(),前台就会把Html标签一同显示