Python笔记(1)

131 阅读2分钟

一、对象

在Python中,一切皆对象。每个对象由:标识(identity)、类型(type)、值(value) 组成。

1、标识用于唯一标识对象,通常应对于对象在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识。

2、类型用于标识对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的操作。可以使用type(obj)获得对象的所属类型。

3、值标识对象所存储的数据的信息。使用print(obj)可以直接打印出值。

对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。


二、引用

在Python中,变量也称为:对象的引用。因为,变量存储的就是对象的地址。

变量通过地址引用了“对象”。

变量位于:栈内存

对象位于:堆内存

  •  Python是动态类型语言

变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。

  •  Python是强类型语言

每个对象都有数据类型,只支持该类型支持的操作。

 


三、同一运算符

同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。

运算符描述
isis是判断两个标识符是不是引用同一个对象
is notis not是判断两个标识符是不是引用不同对象

is与 == 的区别

is 用于判断两个变量引用对象是否为同一个,即比较对象的地址。

== 用于判断引用变量引用对象的值是否相等,默认调用对象的__eq__()方法。

  • 整数缓存问题

Python仅仅对比较小的整数对象进行缓存(范围为[-5,256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。

  •  总结
  1. is比较两个对象的id值是否相等,是否指向同一个内存地址;
  2. == 比较的是两个对象是否相等,值是否相等;
  3. 小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
  4. is 运算符比 == 效率高,在变量和None进行比较时,应该使用is。