• Python 对象保存优化机制


    Python 为了减少开销与内存的使用而设置一些规则:
    * 1. 但凡是不可变对象, 在同一个代码块中的对象, 只要是值相同的对象,
    就不会重复创建, 而是直接引用已经存在的对象.
    
    交互环境下: 不写在一行, 字符类型数据指向一个内存地址, 整型超出小整数则执指向不同的地址.
    代码块缩进相同的语句是一个代码块, 小整数池范围是[-5 到 256], 后续会说.
    
    脚本运行: 不管是否同一行, 都是指向同一个地址.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 脚本运行
    num1 = 1
    num2 = 1
    
    print(num1 is num2)  # True
    
    num3 = 277
    num4 = 277
    print(num3 is num4)  # True
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Python 3.9.4 (tags/v3.9.4:1f2e308, Apr  6 2021, 13:40:21) 
    [MSC v.1928 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> num1 = 1
    >>> num2 = 1
    >>> num1 is num2
    True
    # 写在同一行
    >>> num3 = 277; num4 = 277
    >>> num3 is num4
    True
    # 分行写
    >>> num3 = 277
    >>> num4 = 277
    >>> num3 is num4
    False
    >>>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    image-20221119233829977

    * 2. 计算得到的值, 交互环境下, 没有赋值给变量时, 会直接引用已经存在的对象内存地址.
          脚本运行, 计算得到的值, 赋值不赋值都直接引用.
    
    • 1
    • 2
    # 脚本运行
    num1 = 3.0
    print(9/3 is num1)  # True
    
    num2 = 9/3
    print(num2 is num1)  # True
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    语法警告忽略即可, 它认要做值比较推荐使用 '==' .
    英 SyntaxWarning: "is" with a literal. Did you mean "=="?
    英 语法警告: "is"带有文字。你是说"=="吗?
    
    • 1
    • 2
    • 3
    Python 3.9.4 (tags/v3.9.4:1f2e308, Apr  6 2021, 13:40:21) 
    [MSC v.1928 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> num1 = 3.0
    >>> 9/3 is num1
    <stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
    False
    >>> num2 = 9/3
    >>> num2 is num1
    False
    >>>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    image-20221120000446898

    文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言10是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言11是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言12是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言13是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言14是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言15是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言16是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言17是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言18是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言19是为了避免文章提示质量低.


  • 相关阅读:
    实时多人关键点检测系统:OpenPose | 开源日报 0907
    基于Xml方法的Bean的配置-实例化Bean的方法-构造方法
    CentOS7安装MySQL8.0.28
    qt报错Project ERROR: Cannot run compiler ‘cl‘. Output:
    基于Ubuntu20.04运行OP-TEE_3.17.0_QEMU_V8的环境搭建
    【微服务】SpringBoot启动流程注册FeignClient
    java毕业设计-基于springboot vue的地方美食分享网站-毕业论文+答辩PPT(附源代码+演示视频)
    用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)
    解决 “ImportError: attempted relative import with no known parent package“ 问题
    GTID概念介绍
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/127944402