zoukankan      html  css  js  c++  java
  • day06

    1. 小数据池

    1.1 前提条件

    • 只针对int,str,bool

    1.1.1 int 的范围 -5~256 ,cmd 终端验证

    • 赋值:判断两边的值是否相等
    a = 100
    b = 100
    print(id(a),id(b))   #id相同
    print(a == b)      #结果:True  
    
    • 下边将介绍大于256其实id也相同,属于代码块定义

    1.1.2 str: 字符串从以下几个方面介绍

    • is 是基于内存地址进行判断的
    • 字符串长度为0或者1,默认都采用了驻留机制(小数据池)

    • 字符串长度>1,且只含有大小写字母,数字,下划线时,默认驻留

    • 用乘法得到的字符串,分两种情况

      • 乘数小于1时

        • 仅含大小写字母,数字,下划线,默认驻留
        • 含其他字符,长度<=1,默认驻留
      • 乘数>=2时,

        • 仅含大小写字母,数字,下划线,总长度<=20,默认驻留

        • a = "www.python.com" * 3
          b = "www.python.com" * 3
          print(a is b)  #结果:False
          print(id(a),id(b))	#867652581584 867652581968
          
      • 以上为True,其他为False

    1.2 练习

    a = "wusir你好" *1 #  1或0
    b = "wusir你好" *1
    print(id(a))  #257789114576
    print(id(b))  #257789114576
    print(a is b) #True
    
    a = "wusir你好" *2
    b = "wusir你好" *2
    print(id(a))  #438334254696
    print(id(b))  #438334940328
    print(a is b) #False
    

    2.深浅拷贝

    2.1 浅拷贝

    2.1.11.赋值 使用的是同一个内存空间,没有开辟新的

    lst = ["太白","wusir","大黑",["刘备","关羽","张飞"]]
    lst1 = lst
    print(lst)  #['太白', 'wusir', '大黑', ['刘备', '关羽', '张飞']]
    print(lst1)  #['太白', 'wusir', '大黑', ['刘备', '关羽', '张飞']]
    
    lst.remove("wusir")
    print(lst)   #['太白', '大黑', ['刘备', '关羽', '张飞']]
    print(lst1)   #['太白', '大黑', ['刘备', '关羽', '张飞']]
    
    lst[-1].remove("刘备")
    print(lst)   #['太白', 'wusir', '大黑', ['关羽', '张飞']]
    print(lst1)  ##['太白', 'wusir', '大黑', ['关羽', '张飞']]
    

    ![

    2.1.2 浅拷贝 浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素

    lst = ["太白","wusir","大黑",["刘备","关羽","张飞"]]
    lst1 = lst.copy()
    print(id(lst))   #453267241096
    print(id(lst1))  #453268052936    #id 不同
    
    print(id(lst[1]))     #112526459880
    print(id(lst1[1]))    #112526459880  ##id 相同
    
    print(id(lst[-1]))    #957977868168
    print(id(lst1[-1]))   #957977868168   #id 相同
    
    lst[-1].append(666)
    #lst1[-1].append(666)
    print(lst)
    print(lst1)    
     结果      #都改变
    ['太白', 'wusir', '大黑', ['刘备', '关羽', '张飞', 666]]
    ['太白', 'wusir', '大黑', ['刘备', '关羽', '张飞', 666]]
    
    lst.append(666)    
    lst[1] = 666    
    print(lst)
    print(lst1)  #结果都在lst上改变,lst1不变
    
    lst1.append(666)
    lst1[1] = 666
    print(lst)
    print(lst1)    #结果都在lst1上改变,lst不变
    

    # 浅拷贝的时候只拷贝第一层元素
    # 浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
    # 浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变
    # 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变
    

    2.2 深拷贝

    lst = ["太白","wusir","大黑",["刘备","关羽","张飞"]]
    import copy
    lst1 = copy.deepcopy(lst)
    print(id(lst))   #1022631491464
    print(id(lst1))  #1022633789128    #id 不相同
    
    print(id(lst[1]))     #174734607336
    print(id(lst1[1]))    #174734607336  ##id 相同
    
    print(id(lst[-1]))    #1092954896456
    print(id(lst1[-1]))   #1092957194120   #id 不相同
    
    无论lst还是lst1都再互不影响
    
    # 深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行共用的,可变的数据类型再次开辟空间
    

    3. 集合 (set)

    3.1 没有值得字典 ,无序,不支持索引

    3.2 特性:天然去重,即没有重复的元素

    s = {1,"alex","北京",(1,2,3),12,1,4,"北京"}
    print(s)
    #结果
    #{1, 4, 12, '北京', (1, 2, 3), 'alex'}  无序且没有重复的
    

    3.4 面试题

    lst = [1,2,1,2,4,2,45,3,2,45,2345]
    print(set(lst))           #{1, 2, 3, 4, 2345, 45}
    print(list(set(lst)))     #[1, 2, 3, 4, 2345, 45]
    
    s = set(lst)
    lst1 = list(s)
    print(lst1)
    
    扩展
    s = set(lst)
    lst1 = list(s)
    print(lst1)
    lst1 = [1, 2, 3, 4, 2345, 45]
    lst1.sort()   #升序
    print(lst1)	  #[1, 2, 3, 4, 45, 2345]
    lst1.sort(reverse=True)  #倒序
    print(lst1)   #[2345, 45, 4, 3, 2, 1]
    lst = lst1    #重新赋值
    print(lst)   #[2345, 45, 4, 3, 2, 1]
    

    3.5 集合的增删改查

    # 增:
    # s.add("67")  #只能添加一个
    # print(s)
    # s.update("今天")  # 迭代添加
    # print(s)
    
    # 删:
    # print(s.pop())  # pop有返回值
    # print(s)
    # s.remove(3)     # 指定元素删除
    # print(s)
    # s.clear()         # 清空   -- set() 空集合
    # print(s)
    
    # 改:
    # 先删在加
    
    # 查:
    # for i in {1,2,3}:
    #     print(i)
    
    # 其他操作:
    # s1 = {1,2,3,4,5,6,7}
    # s2 = {5,6,7,1}
    # print(s1 & s2)  # 交集
    # print(s1 | s2)  # 并集
    # print(s1 - s2)  # 差集
    # print(s1 ^ s2)  # 反交集
    # print(s1 > s2)  # 父集(超集)
    # print(s1 < s2)  # 子集
    
    # print(frozenset(s1))  # 冻结集合 更不常用
    # dic = {frozenset(s1):1}
    # print(dic)
    
  • 相关阅读:
    JUC强大的辅助类讲解--->>>CyclicBarrier(信号灯)
    JUC强大的辅助类讲解--->>>CyclicBarrier(循环栅栏)
    JUC强大的辅助类讲解--->>>CountDownLatchDemo (减少计数)
    FutureTask 概念及其相关使用
    集合不安全之 ---> Map
    集合不安全之 ---> Set
    180623-SpringBoot之logback配置文件
    180621-一个简单的时间窗口设计与实现
    180620-mysql之数据库导入导出
    180619-Yaml文件语法及读写小结
  • 原文地址:https://www.cnblogs.com/lvweihe/p/11178532.html
Copyright © 2011-2022 走看看