• 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是为了避免文章提示质量低.


  • 相关阅读:
    专精特新企业认定条件
    unity OnTriggerEnter和OnCollisionEnter生命周期
    Java9-17新特性解读,了解少于3个你可能脱节了
    Azure Kubernetes(AKS)部署及查看应用资源
    01 pyechars 特性、版本、安装介绍
    gitlab重点知识CI/CD详细步骤说明
    漏洞复现-log4j
    基于数据库(MySQL)与缓存(Redis)实现分布式锁
    SQL 语句执行过程
    docker基本使用
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/127944402