zoukankan      html  css  js  c++  java
  • Day 6 小数据池,深浅拷贝以及集合详解

    小数据池---缓存机制(驻留记住)

    == 判断两边内容是否相等

    is
    a = 10
    b = 10
    print(a is b) is判断基于内存地址

    小数据池的数字范围:-5~256

    代码块:一个py文件,一个函数,一个类,一个模块,终端中每一行都是一个代码块
    支持:
    数字:在同一代码块下,只要内容相同就采用相同的内存地址(-6之后,∞)
    在做乘法的时候范围 -5~256 *******
    在做乘法的时候不能使用浮点数

    字符串
    在同一代码块下,只要内容相同就采用相同的内存地址
    在乘法的时候总长度不能超过20******
    乘法的时候中文,特殊符号乘1或0

    布尔值
    在同一代码块下,只要内容相同就采用相同的内存地址

    小数据池:-5~256规则
    数字-5~256*********
    字符串:
    在同一代码块下,只要内容相同就采用相同的内存地址
    在乘法的时候总长度不能超过20 **********
    乘法的时候,特殊符号乘0
    布尔值
    在同一代码块下,只要内容相同就采用相同的内存地址

    小数据池的验证方法,必须脱离代码块才能执行
    先执行代码块的规则,在执行小数据池的规则(驻留机制)

    必会
    == 判断两边的值是否相等******
    is 判断两边的内存地址是否相等****

    深浅拷贝 复制
    面试必问,赋值,浅拷贝,深拷贝

    浅拷贝
    lst = [1,2,3,[5,6,7]]
    lst1 = lst
    print(lst)
    print(lst1)#地址一样

    import copy
    lst = [1,2,3,[5,6,[1,2,3]]]
    lst1 = lst.copy()
    lst[-1].remove(5)
    lst1[-1].append(1)
    lst[-1][0] = 10
    print(lst)
    print(lst1)
    浅拷贝,只拷贝第一层
    增删第一层的时候,修改一个,另一个不变
    增删第二层的时候,修改一个,另一个变
    增删第N层的时候, 修改一个,另一个变
    修改第一层的时候,修改一个,另一个不变
    修改第二层的时候,修改一个,另一个变
    修改第N层的时候, 修改一个,另一个变
    深拷贝
    import copy
    lst = [1,2,3,[5,6,[1,2,3]]]
    lst1 = copy.deepcopy(lst)
    lst[-1][-1].remove(1)
    lst[-1][-1].append(10)
    lst1[-1][-1][0] = 10
    print(lst)
    print(lst1)
    深拷贝,不可变元素公用,可变元素新开辟一个,
    可变元素里面的值公用。
    增删第一层的时候,修改一个,另一个不变
    增删第二层的时候,修改一个,另一个不变
    增删第N层的时候, 修改一个,另一个不变
    修改第一层的时候,修改一个,另一个不变
    修改第二层的时候,修改一个,另一个不变
    修改第N层的时候, 修改一个,另一个不变

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

    深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据数据类型(再次开辟一个新的空间)
    ,空间里的值是不可变的数据进行共用的,可变的数据类型再次开辟空间

    集合 -- set
    没有值得字典 无序 -- 不支持索引
    天然去重 *****

    定义集合
    s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
    print(s)

    面试题:
    lst = [1,2,1,2,4,2,45,3,2,45,2345,]
    print(list(set(lst)))

    s = {1,2,3,4}

    增:

    s.add('1') #只能添加一个(字符串,数字,元组)
    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)

    今日总结
    1.小数据池:
    1.1代码块: 一个文件,一个函数,一个类,一个模块,终端中每一行
    1.1.1 数字: -5 ~ 256
    1.1.2 字符串: 乘法时总长度不能超过20
    1.1.3 布尔值: 内容相同内存地址相同
    1.2 小数据池:
    1.2.1 数字: -5 ~ 256
    1.2.2 字符串: 乘法时总长度不能超过20
    1.2.3 布尔值: 内容相同内存地址相同
    1.3 先执行代码块后执行小数据池
    1.4 == is
    1.4.1 == 判断等号两边值是否相等
    1.4.2 is 判断两边的值内存地址是否相等

    2.深浅拷贝
    2.1 赋值:
    多个变量名指向同一个内存地址
    一个变量对其进行操作,其他变量查看时都变动
    2.2 浅拷贝:
    lst[1:10] -- 是浅拷贝
    浅拷贝只拷贝第一层元素
    修改第一层元素的时候,新开辟的不进行改变
    2.3 深拷贝:
    不可变的数据类型共用,可变的数据类型重新开辟一个空间
    对源数据进行修改,深拷贝的内容不进行改变

    1. 集合
      3.1 集合是没用值得字典
      3.2 集合是无序,可变的
      3.3 集合天然去重
      3.4
      增:add ,update
      删:pop remove clear
      改:先删后加
      查: for循环
      3.5 其他操作:
      & 交集
      | 并集
      - 差集
      ^ 反交集
      > 超集
      < 子集
      frozenset() 冻结集合
      3.6 面试题:
      list(set(要去去重的数据))
  • 相关阅读:
    算法分析之最大子段求和(一)
    算法分析之动态规划
    算法分析之数字三角形逆推
    算法分析之递归与分治策略
    算法分析之汉诺塔问题
    算法分析之猴子吃桃
    基于python玩转人工智能最火框架之TensorFlow人工智能&深度学习介绍
    win10 64下anaconda4.2.0(python3.5)
    PYTHON 爬虫 baidu美女图片
    falkonry
  • 原文地址:https://www.cnblogs.com/zhuzhizheng/p/11178915.html
Copyright © 2011-2022 走看看