这是一个非常经典且容易让人困惑的问题。 严格来说,Python 既不是纯粹的“传值”(Pass by Value),也不是纯粹的“传引用”(Pass by Reference)。 准确的定义是:传对象引用(Pass by Object Reference),或者叫 按赋值传递(Pass by Assignment)。 核心概念:变量是标签,不是盒子 在 C 或 Java 等语言中,变量通常被视为存储数据的“盒子”。但在 Python 中,变量是指向对象的“标签”或“引用”。 当你调用函数时,Python 实际上是将对象的引用(内存地址)传给了函数的参数。 函数内部的行为取决于你传递的对象类型是“可变”还是“不可变”: --- 1. 传递不可变对象(Immutable Objects) 类型: , , , , 表现: 看起来像“传值”。 因为这些对象本身不能被修改,如果你在函数内部试图修改它,Python 会创建一个新的对象,并将参数变量指向这个新对象。外部的变量不会受到影响。 结果: 外部变量 没有改变。 --- 2. 传递可变对象(Mutable Objects) 类型: , ...