zoukankan      html  css  js  c++  java
  • 深浅拷贝、元组、字典、集合

    深浅拷贝

    1、值拷贝

      ls1 = [1,2,3]

      ls2 = ls1

    #ls2直接把栈区里ls1存的地址拿过来,也指向堆区里列表的id

    #原列表发生ls1改变(不是重新赋值),ls2也跟着发生改变

    2、浅拷贝

      ls1 = [1,2,3]

      ls2 = ls1.copy()

    #浅拷贝首先是在堆区里重新开辟一个新的空间存放列表,所以id(ls1)和id(ls2)不一样

    #然后把原列表里存的地址直接拿过来(最后指向和原列表相同的值),

    #如果原列表ls1里不可变类型的值发生重新绑定,ls2的值不发生影响,

    #如果原列表ls1里可变类型的值发生重新绑定,ls2的值跟着发生影响。

    3、深拷贝

      ls1 = [1,2,3]

      from copy import deepcopy

      ls2 = deepcopy(ls1)

    #深拷贝首先是在堆区里重新开辟一个新的空间存放列表,所以id(ls1)和id(ls2)不一样

    #然后把原列表里存的不可变类型值的地址直接拿过来(最后指向和原列表相同的值),可变类型的值重新复制一份,存入新地址

    #如果原列表ls1里不可变类型的值发生重新绑定,ls2的值不发生影响,可变类型发生改变,ls2也不会发生影响

    元组

    #元组可以理解为不可变的列表

    #1、元组可以存放多个值  可以进行成员运算

    #2、元组里可以存放任意类型的值

    #3、元组是有序的    #可以进行索引取值并且可以切片

    #4、可以存放重复的值  #可以进行计数

    基本操作

    1、索引取值

    2、成员运算

    3、长度

    4、切片

    5、运算(拼接)

    6、for循环

    方法

    1、计数

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

    2、查找索引

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

    字典

    #容器(集合):可以存放多个值

    #单列容器:list |  tuple

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

    #字典中的key只能是不可变类型

      --key是字典取值的唯一依据,key一旦确定,就必须确保唯一性

    #字典中的value可以为任意类型

      --value是用来存放世间万物,并且可以重复,可以改变  ==>字典是可变类型

    dic = {'a':1,'b':3,1:10,'c':11,True:100}  在字典里True和False就是1和0

      -->{'a':1,'b':3,1:100,'c':11}

     字典的定义

    #空字典

    d1 = {}

    d2 = dict()

    #用map映射创建字典

    d3 = dict({'a':1,'a':2})

    #用关键字赋值

    d4 = dict('a' = 1,'b' = 2)  

    注:=左边的值为合法变量名,都会被转换成字符串形式的key

    #创建有多个key值采用fromkey

    d5 = {}.fromkey(可迭代对象,默认值)

      把可迭代对象分出来给字典当key,把默认值作为value赋值给他们,如果不设置默认值就把None赋值给他们

    字典的操作

    dic = {'a':1,'b':2}

    1、增:字典名[key] = value

      如果key存在就是修改,key不存在就是添加

      dic['c'] = 3

    2、改

      dic['a'] = 2

    3、查:字典名[key]  只能查找已有的key,没有的key会报错

      print(dic['b'])  -->2

    ###get()  dic.get(key,default)

      按key查找,如果是没有的key,就会返回默认值default(可以自己设置) 

    4、删

      1)pop   按key,不写报错  有返回值

      2)clear    清空列表

      3)popitem()   默认从末尾删除,并返还(key,value)的元组形式

    其他方法

    1、update()更新

    update更新,key有的话就覆盖,没有的话就添加

    2、setdefault()

    和get()实现有点相似括号里面可以加入key,default

    如果key存在  setdefault什么也不干

    如果key不存在     就把默认值赋值给key添加到列表里面,不写就把None赋值给key

    字典的循环

    1、直接循环,得到的就是key的循环

    2、循环key

      dic.key()

      for i in dic.key()

    3、循环value

      dic.value()

      for i in dic.value()

    4、循环key和value

      dic.items()

      for i in dic.items()

        print(i)  -->(key,value)

    重点:相当于解压赋值

      for i , j in dic.items:

        print(i,j)  -->key,value

    集合类型(set)

    #空集合:不能用{} ,因为用来表示空字典了

    s = set()

    #概念

    1、set为可变类型,所可以增加和删除

    2、set不能存重复数据   ,所以可以用来进行去重操作

    3、set为无序存储,所以不可以索引

    4、set为单列容器,所以没有key

    #所以set不能取值

    #增 (add、update)

      1)add()  直接把括号里添加到集合里

      2)update()  更新把括号里的集合添加进去,去重

    #删  (pop() ,remove() , clear())

      pop  随机删除,有返回值

      remove()  按ele删除  没有返回值

      clear()    清空

    #set运算

    #交集:两个都有 &

    #合集:两个的合体 |

    #对称交集:刨除共有的,其他剩下的合体   ^

    #差集  -  独有的   一个集合减去另一个集合和他共有的

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

  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/hesujian/p/10732978.html
Copyright © 2011-2022 走看看