• 集合 小数据池 深浅拷贝


    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)                      #所有返回结果都是不同的
  • 相关阅读:
    不删除数据库,只删除GridView的某一行!
    纯CSS无图打造圆角Table 无图制作圆角
    2009年总结与2010总体计划
    工作中的碰到的问题,以及处理过程:
    SQL Server 2005 不允许远程连接解决方法
    Visual Studio 2008项目模板丢失的解决办法
    C#格式化数值结果表
    准备把csdn的博客搬到这里
    生产系统中 RAC 数据库服务器 不要批量 gzip压缩
    不再更新的业务统计表
  • 原文地址:https://www.cnblogs.com/Mr-wangxd/p/9418693.html
Copyright © 2020-2023  润新知