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


  • 相关阅读:
    PHP实现微信支付及退款流程实例
    【论文阅读】基于强化学习框架的A/B测试中的动态因果效应评估
    SpringBoot整合ElasticSearch
    为什么反序列化失败?
    2022 华数杯 B 题 水下机器人的组装计划
    ScanImage介绍
    爆款视频生成器-视频批量剪辑系统源码开发分享
    ipad协议简述
    JS总结篇
    CSPM是否可以申请职称?解答来了
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/127944402