zoukankan      html  css  js  c++  java
  • 集合 小数据池 深浅拷贝

    set  集合    
    列表、元组、字符串去重
    集合中的元素必须是可哈希(hash)的,但set本身是不可哈希的可变的(有增删改查)、不重复、无序的  
    创建一个空集合 s = set{}
      1、关系型数据的交集,并机,差集,子集
    set1 = {1, 'alex', Fslse, (1,2,3)}
       2、列表、元组、字符串 去重,
    list 1= [1, 1, 1, 3,4 ,4 ,43, 3,5,6]
    set = set(list1)  <---转换成集合就会去重,但返回集合类型
    list2 = list(set)  强制转换回成list列表型
     frozenset()  冻结的集合. 不可变的. 可哈希的
    set的方法:很少用 
    set.pop()   或  pop(set)      随机删除一个元素
    set.clear()                          清空集合 print(set)
    set.add('666')                    print(set) 增加一个元素
    set.update()                      迭代更新插入
    set.remove()                      
    集合方法
    |      并集   多个集合元素合一起并去重
    &    交集   取共有部分
    -     差集   pythons - linuxs
     
    小数据池,在一定情况下出现内存共享,为了节约内存(只有int  和 str 才有的,在字典中也会出现),解决小数据池的问题,通常要想到用深浅copy
    https://www.cnblogs.com/Mr-wangxd/p/9407164.html  内有is ==的例子,所有操作在终端进行,pycharm会改变结果
    is 和 ==的区别
    id()     打印数据的地址
     
    a  = 'hello'
    b = 'hello'
    print(a == b)    返回True    比较的是数值
    print(a is  b)      返回False   比较的是地址,判断是否是同一个对象,看地址方法 print(id(a), id(b))
     
    字符串中如果有特殊字符他们的内存地址就不一样
    注意: pycharm是个坑, 一个py文件中所有相同的字符串 一般都是使用一样的内存地址 
    int类型中  -5 ~ 256之间的数 相同的数全都指向一个内存空间。
    字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致
    a = 'A' * 20  ;  b = 'A' * 20   a is b ==>True
    str类型    单个字符乘以20以内的数字都在同一内存地址;只要字符串含有数字那就不共用内存,不会出现小数据池
    a = [1, 2, 3]
    b = a
    c = b           print(a is c) ==>True   如果c改变 a也会改变  很坑!!!
     
    a = [1, 2, 3]
    c = [1, 2, 3]   print(a is c) ==>True
    #赋值运算他们共用一个列表
    a = [1, 2, 3]
    b = a
    a.append(666)
    print(a, b)
    输出:a==[1, 2, 2, 777] b==[1, 2, 2, 777]
    深浅copy        无论深浅拷贝复制后的地址与源地址不同
    浅copy   从第二层开始以后共用内存,第一层各自用各自的
    浅拷贝两种方式  
    1、 list2 = list1[:]
    2、#.copy()             作用域   作用??????????
    list1 = [1, 2, 3, [4, 5]]
    list2 = list1.copy()
    list1[-1].append(666)
    print(list1, list2)                     #返回[1, 2, 3, [4, 5], 666] [1, 2, 3, [4, 5]]           返回是不同的,说明不共用同一段内存
    list[-1].append(666)              
    print(list1, list2)                    # 返回 [1, 2, 3, [4, 5, 666]] [1, 2, 3, [4, 5, 666]]   返回是相同的 说明从第二层以后共用同一段内存
    深copy   需要导入模块import  copy, 所有都不共用内存,无论几层都是各自用各自的内存
    #deepcopy()      作用域   作用?
    import copy
    list1 = [1, 2, 3, [4, 5]]
    list2 = copy.deepcopy(list1)
    list1[-1].append(666)
    print(list1, list2)
    list[-1].append(666) 
    print(list1, list2)                      #所有返回结果都是不同的
  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/Mr-wangxd/p/9418693.html
Copyright © 2011-2022 走看看