Python 内存管理机制与流程控制详解
Python 垃圾回收机制 (GC)
在许多底层编程语言中,内存的申请与释放需要开发者手动管理。而 Python 引入了自动化的垃圾回收机制(Garbage Collection),极大减轻了开发者的负担。Python 的内存管理主要依赖于引用计数,并辅以标记-清除和分代回收来解决特殊场景下的内存泄露问题。
1. 引用计数 (Reference Counting)
这是 Python 最核心的回收策略。每个对象都会维护一个计数器,记录当前有多少变量指向它。
# 示例
data = [1, 2, 3] # 列表对象引用计数为 1
ref_data = data # 引用计数增加到 2
del ref_data # 引用计数减少到 1
# 当引用计数归零时,该对象占用的内存会被立即释放。
2. 标记-清除 (Mark and Sweep)
引用计数存在一个缺陷:无法处理"循环引用"。例如,两个列表互相嵌套,即便删除了外部变量,它们的引用计数依然不为 0。标记-清除机制会定期扫描内存中的对象,检查它们是否可以从根对象(如全局变量、栈)到达。如果一个对象组成了孤岛且无法被访问,则会被判定为垃圾并清除。
3. 分代回收 (Generational Collection)
为了提高回收效率,Python 将内存中的对象分为三代(0代、1代、2代)。
- 年轻代 (0代): 新创建的对象存放在这里,扫描频率最高。
- 中年代 (1代): 在多次扫描中存活下来的对象会提升到这一代。
- 老年代 (2代): 长期存活的对象进入老年代,扫描频率最低。
程序流程控制理论
流程控制决定了程序代码的执行顺序。常见的执行结构分为三种:
- 顺序结构: 按照代码书写的顺序,自上而下依次执行。
- 分支结构: 根据特定条件的判断结果(True 或 False),决定执行哪一段逻辑。
- 循环结构: 在满足特定条件的前提下,重复运行某段代码。
分支结构:if 语句
Python 使用缩进来表示代码的从属关系(通常为 4 个空格)。只有带有冒号 : 的语句行才能拥有缩进的子代码块。
1. 基础分支 (if ... else)
user_role = input("请输入角色:")
if user_role == "admin":
print("拥有最高权限")
else:
print("普通用户权限")
2. 多条件分支 (if ... elif ... else)
适用于存在多种互斥情况的场景:
score = int(input("输入考试分数:"))
if score >= 90:
print("等级:优")
elif score >= 75:
print("等级:良")
elif score >= 60:
print("等级:及格")
else:
print("等级:不及格")
3. 嵌套分支
分支结构内部可以再次嵌套分支,用于处理复杂的业务逻辑:
is_member = True
balance = 150
if is_member:
if balance > 100:
print("余额充足,可以购买特价商品")
else:
print("请充值")
else:
print("非会员无法参与活动")
循环结构:while 语句
while 循环用于在条件成立时反复执行一段逻辑。
1. break 与 continue
- break: 立即终止当前所在的整个循环。
- continue: 结束本次迭代,直接跳转到循环条件的判断处,开启下一次尝试。
# 打印 1 到 10,但遇到 5 就跳过,遇到 8 就停止
num = 0
while num < 10:
num += 1
if num == 5:
continue
if num == 8:
break
print(f"当前数字: {num}")
2. while 与 else 配合
当 while 循环正常执行完毕(没有被 break 中断)时,会执行 else 块中的内容。
count = 0
while count < 3:
print("循环运行中...")
count += 1
else:
print("循环正常结束,未触发 break")
3. 全局标志位
在多层嵌套循环中,使用 break 只能跳出当前层。若需一次性退出所有循环,推荐使用布尔标志位:
is_active = True
while is_active:
mode = input("选择模式 (q 退出):")
if mode == 'q':
is_active = False
else:
while is_active:
action = input("内部操作 (back 返回上层, exit 退出系统):")
if action == 'exit':
is_active = False
elif action == 'back':
break
print(f"正在执行: {action}")
逻辑运算练习
在 Python 中,逻辑运算符的优先级顺序为:not > and > or。此外,Python 采用短路运算机制:
# 示例分析
result = 1 or 3 # 结果为 1 (or 运算中,左侧为真直接返回)
val = 0 and 2 or 4 # 0 and 2 为 0, 0 or 4 为 4,最终结果为 4
# 注意:在布尔上下文中,0、空字符串、None 等均被视为 False,但返回的仍是原始值。