zoukankan      html  css  js  c++  java
  • 从入门到自闭之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(布尔值)

  • 相关阅读:
    自定义实现wcf的用户名密码验证
    EF6:编写你自己的code first 数据迁移操作(睡前来一篇,翻译的)
    .net 连接Redis
    idea external libraries 只有jdk问题
    MAC vim安装gruvbox主题
    Mac gitk安装与优化
    spring security 4 filter 顺序及作用
    mysql 采样查询 / 间隔查询 / 跳跃查询的两种实现思路
    nginx warn an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/ while reading upstream
    nginx日志 logrotate配置
  • 原文地址:https://www.cnblogs.com/heyulong1214/p/11528414.html
Copyright © 2011-2022 走看看