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

    小知识

    import copy

    小数据池:——缓存机制(驻留机制)

    == ——判断两边的值是否相等

    a = 10
    b = 10
    print(a == b)
    

    is——基于内存地址判断

    a = 10
    b = 10
    print(a is b)
    

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

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

    数字:-5~256——面试会问

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

    字符串在做乘法的时候长度不能超过20

    ​ 字符串在做乘法的时候中文和特殊符号只能乘以1

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

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

    代码块:

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

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

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

    ​ 数字在做乘法的时候范围-5~256

    ​ 数字在做乘法的时候浮点数不好使了

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

    字符串在做乘法的时候长度不能超过20

    ​ 字符串在做乘法的时候中文和特殊符号乘以1或0

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

    先执行代码块的规则,在执行小数据池的规则——(驻留机制)

    面试必问深浅拷贝:(复制)

    赋值 浅拷贝 深拷贝

    赋值

    lst=[1,2,3,[5,6,7]]
    lst1=lst
    print(lst)
    print(lst1)
    lst[-1].append(8)
    print(lst)
    print(lst1)
    结果:
    [1, 2, 3, [5, 6, 7]]
    [1, 2, 3, [5, 6, 7, 8]]
    [1, 2, 3, [5, 6, 7, 8]]
    [1, 2, 3, [5, 6, 7, 8]]
    

    浅拷贝 copy()

    切片是浅拷贝

    lst2=lst.copy()
    print(lst)
    print(lst2)
    print(id(lst))
    print(id(lst2))
    lst2[-1].append(9)
    print(lst)
    print(lst2)
    lst[0]=10
    print(lst)
    print(lst2)
    
    结果
    [1, 2, 3, [5, 6, 7]]
    2145917876488
    2145947661896
    [1, 2, 3, [5, 6, 7, 9]]
    [1, 2, 3, [5, 6, 7, 9]]
    [10, 2, 3, [5, 6, 7, 9]]
    [1, 2, 3, [5, 6, 7, 9]]
    

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

    在修改新拷贝出列表中不可变元素的时候,原列表不改变,

    在修改新拷贝出列表中可变元素的时候,原列表不改变,

    在给新拷贝出的列表中可变数据类型进行增删改,原数据也跟着改变

    浅拷贝只拷贝第一层元素

    浅拷贝再修改第一层元素(不可变数据类型)的是时候,拷贝出来的新列表不改变

    浅拷贝再修改第一层元素(可变数据类型)的是时候,拷贝出来的新列表不改变

    浅拷贝再修改第一层元素中的元素时候,拷贝出来的新列表改变

    深拷贝:

    import copy

    import copy
    lst = [1,2,3,[5,6,7]]
    lst1 = copy.deepcopy(lst)
    print(lst)
    print(lst1)
    

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

    集合:set——没有值的字典

    无序的(不可以索引)元素:不可变数据类型

    空集合--set()

    天然去重

    定义

    增:

    add()#添加一个元素

    update()#迭代添加

    删:

    pop()有返回值,随机删除

    remove()指定元素删除

    clear() 清空

    改:

    先删除在加

    查:

    for循环

    其他的操作:

    &——求交集

    |——并集

    - ——差集

    ^ ——反交集

    > ——父集(超集)

    <——子集

    frozenset()——冻结集合

  • 相关阅读:
    c# 如何制作RealPlayer 视频播放器
    【.Net】在C#中判断某个类是否实现了某个接口
    【EF】Entity Framework 6新特性:全局性地自定义Code First约定
    【EF】EF实现大批量数据库插入操作
    【数据库】各种主流 SQLServer 迁移到 MySQL 工具对比
    【Python】python学习之总结
    【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
    【.Net】Visual Studio的调试技巧
    【转载】用C#编写一个简单的记事本
    【ADO.NET】ADO.NET知识点
  • 原文地址:https://www.cnblogs.com/ciquankun/p/11170172.html
Copyright © 2011-2022 走看看