首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第7章 编程术语
7.1 编程术语定义
7.1.1 作为语言的Python和作为解释器的Python
7.1.2 垃圾回收
7.1.3 字面量
7.1.4 关键字
7.1.5 对象、值、实例和身份
7.1.6 项
7.1.7 可变和不可变
7.1.8 索引、键和哈希值
7.1.9 容器、序列、映射和集合类型
7.1.10 特殊方法
7.1.11 模块和包
7.1.12 可调用对象和头等对象
7.2 经常被混淆的术语
7.2.1 语句和表达式
7.2.2 块、子句和主体
7.2.3 变量和特性
7.2.4 函数和方法
7.2.5 可迭代对象和迭代器
7.2.6 语法错误、运行时错误和语义错误
7.2.7 形参和实参
7.2.8 显式类型转换和隐式类型转换
7.2.9 属性和特性
7.2.10 字节码和机器码
7.2.11 脚本和程序,以及脚本语言和编程语言
7.2.12 库、框架、SDK、引擎、API
第8章 常见的Python陷阱
8.1 循环列表的同时不要增删其中的元素
8.2 复制可变值时务必使用copy.copy()和copy.deepcopy()
8.3 不要用可变值作为默认参数
8.4 不要通过字符串连接创建字符串
8.5 不要指望sort()按照字母顺序排序
8.6 不要假设浮点数是完全准确的
8.7 不要使用链式!=运算符
8.8 不要忘记在仅有一项的元组中添加逗号
第9章 Python的奇特难懂之处
9.1 为什么256 是256,而257 不是257
9.2 字符串驻留
9.3 假的Python 增量运算符和减量运算符
9.4 传递空列表给all()
9.5 布尔值是整数值
9.6 链式使用多种运算符
9.7 Python 的反重力特性
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(三)
小册名称:Python编程轻松进阶(三)
### 7.1.5 对象、值、实例和身份 在Python编程的进阶之旅中,深入理解对象、值、实例以及身份的概念是至关重要的一步。这些概念不仅构成了Python面向对象编程(OOP)的基石,也是理解Python内存管理、性能优化以及复杂数据结构设计的关键。本章节将详细探讨这些概念,帮助读者建立起坚实的理论基础。 #### 7.1.5.1 对象与值的基本概念 在Python中,一切皆是对象。这句话虽简短,却蕴含了Python编程哲学的核心。对象是具有属性和方法的实体,它们可以存储数据(属性)并可以执行操作(方法)。而值则是存储在对象中的数据本身。理解对象与值的关系,首先需要认识到Python中的变量并不直接存储数据,而是存储了数据对象的引用(或说是内存地址)。 - **对象**:是数据和功能(方法)的封装体,可以视为一个具有特定属性和行为的实体。 - **值**:是存储在对象中的具体数据,可以是基本数据类型(如整数、浮点数、字符串)或复杂数据类型(如列表、字典、自定义对象)的值。 #### 7.1.5.2 实例与类的关系 在面向对象编程中,类(Class)是创建对象的蓝图或模板,它定义了对象应有的属性和方法。通过类,我们可以创建多个具有相同属性和方法的对象,这些对象被称为类的实例(Instance)。 - **类**:是一种抽象的数据类型,用于描述具有相同属性和方法的一组对象的集合。 - **实例**:是根据类创建的具体对象,它拥有类定义的所有属性和方法,并可能包含额外的数据。 例如,定义一个`Person`类来描述人,我们可以创建多个`Person`类的实例,每个实例代表一个具体的人,具有姓名、年龄等属性和说话等方法。 ```python class Person: def __init__(self, name, age): self.name = name self.age = age def speak(self): print(f"{self.name} says hello!") # 创建Person类的两个实例 person1 = Person("Alice", 30) person2 = Person("Bob", 25) # 调用实例的方法 person1.speak() # 输出: Alice says hello! person2.speak() # 输出: Bob says hello! ``` #### 7.1.5.3 值的可变性与不可变性 在Python中,对象根据其值的可变性分为可变对象(Mutable)和不可变对象(Immutable)。这一区别对于理解对象的状态变化、内存使用以及函数参数传递机制至关重要。 - **不可变对象**:一旦创建,其值就不能被改变。常见的不可变对象包括整数、浮点数、字符串和元组。对于不可变对象,任何修改操作都会生成一个新的对象,原对象保持不变。 - **可变对象**:其值可以在创建后被修改。常见的可变对象包括列表、字典、集合以及用户自定义的类实例(如果类中定义了修改属性的方法)。可变对象的修改不会生成新对象,而是直接修改原对象的状态。 理解这一点对于编写高效的Python代码至关重要,因为它直接影响到内存的使用和程序的性能。 #### 7.1.5.4 身份与等同性 在Python中,对象的身份(Identity)和等同性(Equality)是两个不同的概念。 - **身份**:指的是对象在内存中的唯一标识,即对象的内存地址。可以使用`id()`函数获取对象的身份。 - **等同性**:指的是两个对象是否具有相同的内容或值。对于基本数据类型,等同性通常通过`==`操作符来判断;对于复杂数据类型,则需要根据类的`__eq__`方法(如果定义了的话)来判断。 值得注意的是,即使两个对象的内容完全相同,它们的身份也可能不同,因为它们可能存储在内存的不同位置。相反,如果两个对象的身份相同,那么它们的内容也必然相同。 ```python a = [1, 2, 3] b = a # b是a的引用,它们指向同一个对象 c = [1, 2, 3] # c是新的对象,内容与a相同但身份不同 print(id(a) == id(b)) # 输出: True,因为它们指向同一个对象 print(id(a) == id(c)) # 输出: False,虽然内容相同但身份不同 print(a == c) # 输出: True,因为内容相同 ``` #### 7.1.5.5 深入理解对象生命周期与垃圾回收 对象的生命周期从它被创建开始,到不再被任何变量引用且垃圾回收器(Garbage Collector)回收其占用的内存结束。理解这一过程对于编写内存高效、避免内存泄漏的程序至关重要。 Python使用了一种名为“引用计数”和“分代收集”相结合的垃圾回收机制。引用计数会跟踪每个对象被引用的次数,当引用次数降为零时,该对象即成为垃圾回收的候选。然而,对于循环引用的情况,Python还会使用分代收集机制来进一步清理这些无法通过引用计数直接回收的对象。 #### 结语 通过本章的学习,我们深入理解了Python中对象、值、实例和身份的核心概念。这些概念不仅是面向对象编程的基础,也是编写高效、可维护Python代码的关键。希望读者能够将这些知识应用到实践中,不断提升自己的编程能力。记住,Python的哲学是“用一种方法,最好是只有一种方法来做一件事”,而深入理解这些基础概念,正是我们找到“那一种方法”的必经之路。
上一篇:
7.1.4 关键字
下一篇:
7.1.6 项
该分类下的相关小册推荐:
Python合辑4-130个字符串操作示例
机器学习算法原理与实战
Python3网络爬虫开发实战(下)
Python与办公-玩转PPT
Python爬虫入门与实战开发(上)
Python合辑7-集合、列表与元组
Python高性能编程与实战
Python甚础Django与爬虫
Python与办公-玩转Word
Python合辑9-判断和循环
Python高并发编程与实战
Python数据分析与挖掘实战(下)