Python基础知识(day6)

day6

今日内容

  • 集合

  • 内存相关

  • 深浅拷贝

内容补充

  1. 列表

    • reverse反转

    • sort排序

      # 反转
      v1 = [1,2,3,4,5]
      print(v1)
      v1.reverse()
      print(v1)
      # 排序
      v1.sort(reverse=False) # 默认从小到大
      print(v1)
      v1.sort(reverse=True) # 从大到小
      print(v1) 
      
  2. 字典

    • keys/values/intems

    • get方法

      # 字典补充,get方法
      info = {"llk": "hkq"}
      # print(info["llk"])
      v2 = info.get("llk", 666) # 不存在key-value时,返回666,不填的话返回NULL
      print(v2)
      
    • update

    • pop

内容详细

  1. 集合set

    • 无序
    • 无重复
    v = {1,2,3,4,5}
    # 集合set
    v = {1,2,3,4}
    print(v)
    
    # 空集合/空字典
    v1 = {} # 空字典
    print(type(v1))
    
    v2 = set() # 空集合
    print(type(v2))
    
  2. 集合独有功能

    # 独有功能
    # add添加
    v = {1,2}
    v.add('li')
    print(v)
    
    # discard删除
    v = {1,2,3}
    v.discard(2)
    print(v)
    
    # update 批量更新
    v = {1,2,3}
    v.update({11,22,33})
    print(v)
    
    # intersection交集
    v = {1,2,3}
    v2 = v.intersection({1,6,7})
    print(v2)
    
    # union并集
    v = {1,2,3}
    v3 = v.union({3,45,6})
    print(v3)
    
    # difference差集
    v = {1,2,3,4}
    v4 = v.difference({1,2})
    print(v4)
    
  3. 集合公共功能

    • len

      # len
      v = {1,2,3,4}
      print(len(v))
      
    • for循环

      # for循环
      v = {1,2,3,4,5}
      for item in v:
          print(item)
      
    • 索引【无】

    • 步长【无】

    • 切片【无】

    • 删除【无】

    • 修改【无】

  4. 集合嵌套问题

    • ps:集合内元素不可变,需要转换为哈希值
    • 因为以哈希表方式存储,查询速度非常快
    • 字典存为哈希值时,只有key转为哈希值
    # 集合嵌套 列表/字典/集合-->不能放在集合中+不能作为字典的key(unhashable)
    info = {1,2,"li",True,None,(1,2)}
    print(info)
    

内存相关

  • 示例一

    # 值相同,开辟内存不同
    v1 = {1,2,3}
    v2 = {1,2,3}
    
    v1 = 666
    v2 = 666
    
    v1 = "llk"
    v2 = "llk"
    # 按理v1和v2 是不同的内存地址,特殊:
    1. 整形: -5 ~ 256 加缓存,不会开辟内存
    2. 字符串:"alex" "llk" --会加缓存,不会开辟内存
    "f_*" * 3 -会重新开辟内存
    
  • 示例二

    # 开辟了两个内存,变量v1前面指向的额内存成为垃圾,等待回收
    v1 = {1,2}
    v1 = {2,3}
    
    
  • 示例三

    # v1开辟内存,v2也指向v1开辟的内存,v1修改值后,v2也被修改,本质是v1和v2指向同一个内存空间
    v1 = {1,2,3}
    v2 = v1
    v1.append(666)
    print (v2) # 含666
    
    # 练习2
    v1 = {1,2,3}
    v2 = v1
    v1 = {2,3,4}
    print (v2) # v2 = {1,2,3}内存指向未改变
    
    #练习3
    v1 = 'llk'
    v2 = v1
    v1 = 'kll'
    print (v2) # v2 = 'llk'
    
    
  • 示例四

    v = [1,2,3]
    values = [11,22,v]
    # 练习1
    v.append(8)
    print (values) # [11,22,[1,2,3,8]
    
    # 练习2
    values[2].append(999)
    print (v) # [1,2,3,999]
    
    #练习3
    v = 999
    print(values) # [11,22,[1,2,3]
    
    #练习4
    values[2] = 666
    print(v) #[11,22,[1,2,3]]
    
    
  • 示例五

    v1 = [1,2]
    v2 = [2,3]
    v2 =[11,22,v1,v2,v1]
    
  • 查看内存地址

    v1 = [1,2,3]
    v2 = v1
    print(id(v1),id(v2))
    v1 = 999
    print(id(v1),id(v2))
    
  • python 把常用的数字和字符串加入缓存,内存是一致的

  • 问题: == 和 is有什么区别

    • == 比较值是否相等
    • is比较内存是否相等
原文地址:https://www.cnblogs.com/lilangkui/p/12495217.html