zoukankan      html  css  js  c++  java
  • Python学习之路基础篇--07Python基础+编码、集合 和 深浅Copy

    1 小数据池(节省内存)

      只有数字和字符串中内存,储存在同一个内存地址中

      数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了

    2 编码

      ASCii 中    英文用 8 位 ,一个字节

      unicode 中    英文用 32 位 ,四个字节  中文用 32 位 ,四个字节

      utf-8 中    英文用 8 位 ,一个字节  中文用 24 位 ,三个字节

      gbk 中    英文用 8 位 ,一个字节  中文用 16 位 ,二个字节

      特点:  各个编码之间的二进制,是不能互相识别,会产生乱码

           文件的储存和传输,不能使用unicode(太大了),而使用utf-8、utf-16、gbk2312和ascii等

      在python3中,str在内存中是用unicode编码的

      bytes 类型:

        对于英文str

          表现形式: s = 'eli'

          编码方式:unicode

        对于英文bytes

          表现形式: s = b'eli'

          编码方式:utf-8 或 gbk

        

        对于中文str

          表现形式: s = '中国'

          编码方式:unicode

        对于中文bytes

          表现形式: s = b'xe34e34e23e23e2312'  (有6个字节,故转成了utf-8的形式)

          编码方式:utf-8 或 gbk

       用encode 编码,将str 转化成 bytes 类型   

    s1 = 'eli'
    s1 = s1.encode('utf-8')    #b'eli'

    2 关于字典和列表的小知识

    #删除偶数位的数
    # 1 切片
    lis = [11, 22, 33, 44, 55, 66]
    lis = lis[::2]print(lis)
    # 2 先取一个新列表,然后替换下即可
    l1 = []
    for i in lis:
        if lis.index(i) % 2 == 0 :
            l1.append(i)
    lis = l1
    print(lis)
    
    dic = dict.fromkeys([1,2,3],'春哥')print(dic)
    dic = dict.fromkeys([1,2,3],[])
    print(dic)  # {1: [], 2: [], 3: []}
    dic[2].append('袁姐')  #因为没有序号,所以添加, 就所有都添加的
    print(dic)
    dic[2].extend('二哥')  #迭代式添加print(dic)
    # 重要的一点,在循环列表和字典的时候,不能删除其元素,如果删除就会报错

      0、[]、{}、()、'' 和 set() 转化成bool值 都是False

    3 元组

     如果是单个元素在元组之中,以没有逗号,原本什么样的数据类型,就是什么样的 

    tu1 = (1)
    tu2 = (1,)
    print(tu1,type(tu1))
    print(tu2,type(tu2))

    4 集合

      是可变的数据类型,其中的元素是不可变的数据类型,无序且不重复(可以用于去重)

    #创建
     set1 = set({1,3,'barry'})
     set2 = {1,2 ,'barry'}
     print(set1)
     print(set2)
    
    #
     set1 = {'tom', 'eli', 'sofile', 'jay'}
     set1.add('ALEX')
     set1.update('shuai') #迭代增加
     print(set1)
    
    #
     set1 = {'tom', 'eli', 'sofile', 'jay'}
     set1.remove('jay')  #按元素删除,没有报错
     set1.pop()  #随机删除
     set1.clear()    #清除集合
     del set1    #删除集合
    #print(set1)
    
    # 交集(&  intersection)
    set1 = {1, 2, 3, 4, }
    set2 = {3, 4, 5, 6, }
    print(set1 & set2)
    print(set1.intersection(set2))
    
    # 并集 ( union)
    print(set1 | set2)  # {1, 2, 3, 4, 5, 6}
    print(set2.union(set1))  # {1, 2, 3, 4, 5, 6}
    
    # 差集 (- difference)
    print(set1 - set2)  # {1, 2,}
    print(set1.difference(set2))  # {1, 2}
    
    # 反交集(^  symmetric_difference)
    print(set1 ^ set2)  # {1, 2, 6, 7}
    print(set1.symmetric_difference(set2))  # {1, 2, 6, 7}
    
     # 子集和超集
    print(set1 < set2)
    print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
    
    print(set2 > set1)
    print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
    
    # frozenset 把集合变成不变类型
    s = frozenset('barry')
    print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

    5 深浅Copy

      赋值的过程,只是将一个的内存地址 赋给另外一个,只是指向同一个内存地址,若改变其值,并不会使另一个改变,因为其的内存地址并为改变

    a = 1
    b = a
    print(a, b )
    b = 2
    print(a, b)

      对于列表来说,赋值这行为比作,使两个东西同时指向同一个杯子, 而水是共享的,当你改变杯子里面的水,两个值都会发生变化 

      当你使用copy 方法时,把这个杯子给copy下来,有同样的内存地址,当你改变其中的项时,改变的其时是那个项所指的内存地址,另一个杯子,并没有改变,相互独立

    al = [1,1,1,[22,33]]
    bl = al.copy()
    print(al,bl )
    al[2] = 99
    print(al,bl)
    print(id(al[2]),id(bl[2]))

      然而出现嵌套的情况,就是杯子中还有小杯子,小杯子里的水,是共享的,所以一个改变,另一个也跟着变化(浅copy)

      深copy 就是要 import copy 

      然后再进行copy ,,这样就是所有都复制

  • 相关阅读:
    GDI+常用操作、入门解析
    实用SQL语句大全
    SQL语句全解析
    ASP.NET MVC 浅析
    C#版文件分割器
    转一个orbitpanel GIS
    怎么给listbox 的item 添加动画1? GIS
    怎么给listbox 的item 添加动画? GIS
    关于查找可视树的一点问题 GIS
    判断gridview 滑动到最右端 GIS
  • 原文地址:https://www.cnblogs.com/YS-0717/p/9396839.html
Copyright © 2011-2022 走看看