• python基础(三)


    缓存机制

    1、id   is   ==

    is     比较的是内存地址

    ==  比较的数值是否相等

    id    获取对象的内存地址

    总结:两个数据的内存的地址相同,两个的数据值一定相同


    2、代码块

    代码块:我们所有的代码都需要依赖代码块执行

    一个文件就是一个代码块

    交互式命令下一行就是一个代码块

    3、两个机制:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制

    4、同一个代码块下的缓存机制(字符串驻留机制)

    前提条件:在同一个代码块内

    机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否已经存在,如果存在,会将其重用,换句话说 ,执行同一代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中之前的这个值,所以在你给出的例子中,文件执行时候(同一代码块)会把相同的两个变量指向同一个对象,满足缓存机制则他们在内存中存在一个,即:id相同。

    适用对象:int   bool   str  

    具体细则:所有的数字,bool,几乎所有的字符串

    优点:提升性能,节省内存

    5、不同代码块下的缓存机制(小数据池)

    前提条件:不同代码块之间

    机制内容:python自动将-5~256的整数进行了缓存,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象,而是使用字符串驻留池中创建好的对象。

    其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将-5~256的整数,和一定规则的字符串,放在一个“池”中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。

    适用对象:int bool str

    具体细则:-5~256的整数,bool,一定规则的字符串

    优点:提升性能,节省内存

    image

    6、总结:

    1、面试题

    2、回答的时候一定要分清楚:同一代码块适用一个缓存机制,不同代码块适用另一个缓存机制(小数据池)

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

    4、缓存机制的优点:提升性能,节省内存

    深浅拷贝

    浅拷贝:


    image

    深拷贝:

    image

    l1 = [1,3,5,[22,88]]
    l2 = l1.copy()
    print(l1)                       # [1, 3, 5, [22, 88]]
    print(l2)                       # [1, 3, 5, [22, 88]]
    
    l1[-1].append(666)
    print(l1)                      # [1, 3, 5, [22, 88, 666]]
    print(l2)                       # [1, 3, 5, [22, 88, 666]]
    
    print("---------------------------------")
    
    import copy
    l1 = [1,3,5,[22,88]]
    l2 = copy.deepcopy(l1)
    print(l1)                            #  [1, 3, 5, [22, 88]]
    print(l2)                           # [1, 3, 5, [22, 88]]
    l1[-1].append(666)
    print(l1)                          # [1, 3, 5, [22, 88, 666]]
    print(l2)                           # [1, 3, 5, [22, 88]]
    
    # 总结:
    # 浅拷贝:list dict  嵌套的可变数据类型元素是同一个
    # 深拷贝:  list dict 嵌套的可变数据类型不是同一个





    ------------------- end -----------------------

    对于一个有思想的人来说,没有地方是荒凉而遥远的
  • 相关阅读:
    Chrome 使用 Evernote 插件
    【MySQL】ON DUPLICATE KEY UPDATE
    【MySQL】Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and ...
    libevent API
    LLServer--》对LevelDB的应用
    Linux信号signal处理机制
    守护进程
    使用 libevent 和 libev 提高网络应用性能(IBM)
    Libev和LibEvent
    利用TokyoTyrant构建兼容Memcached协议、支持故障转移、高并发的分布式Key-value持久存储系统(转)
  • 原文地址:https://www.cnblogs.com/quanag/p/12630213.html
Copyright © 2020-2023  润新知