从入门到自闭之Python集合,深浅拷贝(大坑)

小数据池

  1. int: -5~256
  2. str:
    1. 字母,数字长度任意符合驻留机制
    2. 字符串进行乘法时总长度不能超过20
    3. 特殊符号进行乘法时只能乘以0

代码块:

一个py文件,一个函数,一个模块,终端中的每一行都是代码块

  1. int:-5~无穷大
  2. str:
    1. 定义字符串的时候可以是任意的
    2. 字符串(字母,数字)进行乘法时总长度不得超过20
    3. 特殊字符(中文,符号)进行乘法时乘以0或者1
  3. bool:
    1. True
    2. False

is是判断两边的内存地址是否相同

==判断两个值是否相等

代码块、小数据池同在的情况下先执行代码块。

驻留机制:节省内存空间,提升效率(减少了开辟空间和销毁空间的耗时)

集合

  1. 集合是python中的数据类型之一

  2. 定义方式:set

    • 集合就是一个没有值的字典
  3. 字典的值:唯一,不可变

  4. 集合:无序,可变

  5. 集合天然去重

    # s = {1,23,4,2,1,2,3,1}
    print(s)
    输出结果:{1, 2, 3, 4, 23}
    
    # 面试题:
    lst = [1,223,1,1,2,31,231,22,12,3,14,12,3] print(list(set(lst)))
    输出结果:[1, 2, 223, 3, 231, 12, 14, 22, 31]
    
  6. s = {} #空字典

    s = set() #空集合

  7. 增:

     s = set()    
    
    s.add("alex")   #直接添加,
    
    输出结果为:{'alex'}    
    
     s.update("wusir")   #迭代添加,
    
    输出结果为:{'r', 'i', 'w', 's', 'u'}    
    
     set("wusir")    #迭代添加,
    
    输出结果为:set()
    
  8. s = {100,0.1,0.5,1,2,23,5,4}
    s.remove(4)    # 通过元素删除
    print(s)
    s.clear()  # 清空
    s.pop()      # 随机删除 (最小的)
    print(s)
    
  9. 改:

    • 先删后加
  10. 查:

    • for 循环
  11. 其他操作:

    1. 差集--“-”
    2. 交集--“&”
    3. 并集--“|”-管道符
    4. 反交集--“^”
    5. 子集--“>”返回的是一个布尔值
    6. 父集(超集)--"<"返回的是一个布尔值
    7. 冻结集合:frozenset()

深浅拷贝

  1. ​ 赋值:将多个变量指向一个同一个内存地址就是赋值

  2. 浅拷贝:

    1. 只拷贝第一层元素的地址,只有修改第一层的时候元数据不受影响

    2. 给可变数据类型进行添加的时候源数据会受影响

    3. = 是修改,.append是添加

    4. 可变数据类型能够添加和修改,不可变数据类型只能修改

      a = [1,2,3,[4,5]]
      b = a[:]  # 浅拷贝
      print(id(a[-1][0]))
      print(id(b[-1][0]))
      a.append(9)   
      print(a)
      print(b)      
      
      a = [1,2,3,[4,5,6,[9,10]],67]
      b = a  # 赋值
      b = a[:]
      a[-2].append(10)#[1, 2, 3, [4, 5, 6, [9, 10], 10], 67]
      a[-2][-1].append(10)#[1, 2, 3, [4, 5, 6, [9, 10, 10]], 67]
      print(b)
      
  3. 深拷贝:不可变数据类型内存地址共用,可变数据类型新开辟一个空间

    # import copy  # 导入 copy模块
    a = [1,2,3,[4,5],6]
    b = copy.deepcopy(a)
    print(id(a[-2]))#2812949845896
    print(id(b[-2]))#2812949847304
    print(a)
    print(b)
    print(a == b)		#True
    print(id(a),id(b))
    print(a is b)		#False
    

可变数据类型:list(列表),dict(字典),set(集合)

不可变数据类型:int(整型),str(字符串),tuple(元祖),bool(布尔值)

posted @ 2019-09-16 17:16  丶Howie  阅读(130)  评论(0编辑  收藏  举报