Python 对象保存优化机制

Python 为了减少开销与内存的使用而设置一些规则:
* 1. 但凡是不可变对象, 在同一个代码块中的对象, 只要是值相同的对象,
就不会重复创建, 而是直接引用已经存在的对象.

交互环境下: 不写在一行, 字符类型数据指向一个内存地址, 整型超出小整数则执指向不同的地址.
代码块缩进相同的语句是一个代码块, 小整数池范围是[-5 到 256], 后续会说.

脚本运行: 不管是否同一行, 都是指向同一个地址.
# 脚本运行
num1 = 1
num2 = 1

print(num1 is num2)  # True

num3 = 277
num4 = 277
print(num3 is num4)  # True

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
>>>

image-20221119233829977

* 2. 计算得到的值, 交互环境下, 没有赋值给变量时, 会直接引用已经存在的对象内存地址.
      脚本运行, 计算得到的值, 赋值不赋值都直接引用.
# 脚本运行
num1 = 3.0
print(9/3 is num1)  # True

num2 = 9/3
print(num2 is num1)  # True

语法警告忽略即可, 它认要做值比较推荐使用 '==' .
英 SyntaxWarning: "is" with a literal. Did you mean "=="?
英 语法警告: "is"带有文字。你是说"=="吗?
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
>>>

image-20221120000446898

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值