2.2 Python对象和引用
数据表示为对象
对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作
Python 3中,一切皆为对象
每个对象由标识(identity)、类型(type)和值(value)标识
Python中的对象
(1)标识(identity)用于唯一标识一个对象,通常对应于对象在计算机内存中的位置。使用内置函数id(obj1)可返回对象obj1的标识
通过内置的id()函数,可以获取一个对象唯一的id标识(CPython的实现为内存存放位置)
(2)类型(type)用于表示对象所属的数据类型(类),数据类型(类)用于限定对象的取值范围,以及允许执行的处理操作。使用内置函数type(obj1)可以返回对象obj1所属的数据类型
通过内置的type()函数,可以判断一个对象的类型
(3)值(value)用于表示对象的数据类型的值。使用内置函数print(obj1)可返回对象obj1的值
变量、赋值语句和对象的引用(1)
Python对象是位于计算机内存中的一个内存数据块
为了引用对象,必须通过赋值语句,把对象赋值给变量(也称之为把对象绑定到变量)
指向对象的引用即变量
Python还支持以下赋值语句
(1)链式赋值(chained assignment)
(2)复合赋值语句
(3)系列解包赋值
常量
Python语言不支持常量,即没有语法规则限制改变一个常量的值
Python语言使用约定,声明在程序运行过程中不会改变的变量为常量,通常使用全大写字母(可以使用下划线增加可阅读性)表示常量名
【例2.6】常量示例
对象内存示意图(1)
Python程序运行时,在内存中会创建各种对象(位于堆内存中),通过赋值语句,将对象绑定到变量(位于栈内存中),通过变量引用对象,进行各种操作
多个变量可以引用同一个对象
如果一个对象不再被任何有效作用域中的变量引用,则会通过自动垃圾回收机制,回收该对象占用的内存
不可变对象(immutable)
不可变对象一旦创建,其值就不能被修改,例如:int、str、complex等
【例2.9】不可变对象示例
可变对象(mutable)
可变对象的值可以被修改
Python对象的可变性取决于其数据类型的设计,即是否允许改变其值
【例2.10】可变对象示例
2.3 标识符及其命名规则
标识符是变量、函数、类、模块和其他对象的名称
标识符的第一个字符必须是字母、下划线(“_”),其后的字符可以是字母、下划线或数字
一些特殊的名称,如if、for等保留关键字,不能作为标识符
例如,a_int、a_float、str1、_strname、func1为正确的变量名;而99var、It'sOK、for(关键字)为错误的变量名
标识符注意事项
(1)Python标识符区分大小写。例如,ABC和abc视为不同的名称
(2)以双下划线开始和结束的名称通常具有特殊的含义。例如,__init__为类的构造函数,一般应避免使用
(3)避免使用Python预定义标识符名作为自定义标识符名。例如:NotImplemented、Ellipsis、int、float、list、str、tuple等
保留关键字