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