zoukankan      html  css  js  c++  java
  • day06——小数据池、深浅拷贝、集合

    day06

    小数据池

    小数据池——缓存机制(驻留机制),只是一种规格,不会实际的开辟一个空间

    • == 判断两边内容是否相等 *****
    # a = 10
    # b = 10
    # print(a == b)
    
    • is 基于内存地址进行判断 *****
    # a = 10
    # b = 10
    # print(a is b)  is判断基于内存地址进行判断
    # print(id(a))
    # print(id(b))
    

    小数据池支持的对象也是:数字,字符串,布尔值

    • 小数据池的数字范围:-5——256*****
    • 字符串:在同一代码块下,只要内容相同就采用相同的内存地址

    乘法的时候总长度不能超过20*****

    乘法的时候中文,特殊符号乘以0

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

    小数据池的验证方法,必须脱离代码块才能进行验证

    先执行代码块的规则,当代码块的规则不符合的时候再执行小数据池的规则(驻留机制)

    # a = -2.5 * 2
    # b = -2.5 * 2
    # print(id(a))
    # print(id(b))  
    # print(a is b)   # True
    
    
    # a = "alex你好" *2
    # b = "alex你好" *2
    # print(id(a))
    # print(id(b))
    # print(a is b)   # True
    
    代码块

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

    支持的数据类型:数字,字符串,布尔值

    • 数字:在同一个代码块下,只要内容相同就采用相同的内存地址(比-5小的就不是)

    数字在做乘法的时候范围: -5——256,不能使用浮点数 *****

    • 字符串:在同一代码块下,只要内容相同就采用相同的内存地址

    乘法的时候总长度不能超过20 *****

    乘法的时候中文,特殊符号乘以1或0

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

    深浅拷贝

    面试必问:赋值,浅拷贝,深拷贝

    赋值:

    # lst = [1,2,3,[5,6,7]]
    # lst1 = lst
    # print(lst1)
    # print(lst)
    
    # lst[-1].append(8)
    # print(lst1)
    # print(lst)
    
    浅拷贝

    拷贝:复制

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

    浅拷贝的时候只拷贝第一层元素

    规则:

    修改原列表里面的整体元素只有原列表改变,如果修改原列表里面的整体元素里面的元素,则两个都改变

    修改新列表里面的整体元素只有新列表改变,如果修改新列表里面的整体元素里面的元素,则两个都改变

    如果只是修改原列表或者新列表的整体元素,则改变的那个列表改变,另外一个不改变

    # lst1 = lst.copy()  # 新开辟一个空间给lst1
    #
    # print(lst[-1])
    # print(lst1[-1])
    #
    # print(id(lst1[-1]))
    # print(id(lst[-1]))
    
    # 浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素
    
    # lst = [1,2,3,[5,6,7]]
    # lst1 = lst.copy()
    # lst1[-1].append(8)
    # print(lst)
    # print(lst1)
    
    # lst = [1,2,3,[5,6,7]]
    # lst1 = lst.copy()
    # lst[3] = 567
    # print(lst1)
    # print(lst)
    
    
    # lst = [1,2,3,4,[5,6,7,[8,9]]]
    # lst1 = lst.copy()  #  [1,2,3,4,[5,6,7,[8,9]],10]
    # lst1.append(10)
    # print(lst)
    # print(lst1)
    
    # lst = [1,2,3,4,[5,6,7,[8,9]]]
    # lst1 = lst.copy()
    # lst1[-1][-1] = "56"
    # print(lst) # [1,2,3,4,[5,6,7,[8,9]]]
    # print(lst1) # ["56",2,3,4,[5,6,7,[8,9]]]
    
    # lst = [[1,2,],90,6,7,[5,6]]
    # lst1 = lst.copy()
    # lst1[-1] = 8
    # print(lst)
    # print(lst1)
    
    # dic = {"alex":[1,2,3,[5,6]]}
    # dic1 = dic.copy()
    # dic["alex"][0] = "56"
    # print(dic)
    # print(dic1)
    
    深拷贝

    需要导入:import copy

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

    # import copy  #导入
    # lst = [1,2,3,[5,6,7]]
    # lst1 = copy.deepcopy(lst)  # 深拷贝
    # lst[-1].append(8)
    # print(lst)
    # print(lst1)
    
    
    # lst = [1,2,3,[5,6,7,[8,10,9]]]
    # import copy
    # lst1 = copy.deepcopy(lst)
    # print(id(lst[-1][-1]))
    # print(id(lst1[-1][-1]))
    

    集合

    集合 ——set 无序的——不支持索引

    没有值的字典,天然去重

    类似字典的键,可变类型不能放:列表、字典、集合不能放

    # 定义集合
    # s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
    # print(s)
    
    • add() :只能添加一个
    • update() :迭代添加
    # s = {1,2,3,4}
    # s.add("67")  #只能添加一个
    # print(s)
    # s.update("今天")  # 迭代添加
    # print(s)
    
    • pop() :随机删除,有返回值
    • remove(值) :指定删除
    • clear() :清空 ——set() 空集合
    # s = {1,2,3,4}
    # print(s.pop())  # pop有返回值
    # print(s)
    # s.remove(3)     # 指定元素删除
    # print(s)
    # s.clear()         # 清空   -- set() 空集合
    # print(s)
    

    先删除再添加

    for循环

    # for i in {1,2,3}:
    #     print(i)
    

    打印的时候是无序的,循环的是有序的

    其他操作

    交集:&

    并集: |

    差集: -

    反交集:^

    父集(超集): >

    子集 : <099

    frozenset() : 冻结集合

    # 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)
    

    面试题:

    # 面试题:
    # lst = [1,2,1,2,4,2,45,3,2,45,2345,]
    # print(list(set(lst)))
    
  • 相关阅读:
    有关UDP与TCP的一些疑问?
    UNP Ch 11, Name and Address Conversion
    C语言中的static关键字
    Typcical code to enable nonblocking I/O
    UNPv1_r3读书笔记: SCTP编程[转]
    用gcc链接重复定义的函数
    C语言编码风格 样例
    Chapter 3: File I/O
    getsockopt函数的使用
    开博客了
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11178242.html
Copyright © 2011-2022 走看看