Python采用传对象引用方式,不可变对象(如整数、字符串)在函数内修改不影响原变量,因赋值会创建新对象;可变对象(如列表、字典)可通过方法修改内容,影响原始对象,但重新赋值则断开引用。

在 Python 中,并没有像 C++ 或 Java 那样明确的“值传递”和“引用传递”的分类。Python 的参数传递方式更准确的说法是“传对象引用”(pass-by-object-reference)。理解这一点,就能明白为什么有些数据类型在函数中修改会影响原变量,而有些不会。
不可变对象:表现像“值传递”
当传递的是不可变对象(如整数、字符串、元组)时,函数内部无法改变原对象。因为这些对象不能被修改,任何“修改”操作实际上会创建一个新的对象。示例:
千博企业网站管理系统静态HTML搜索引擎优化单语言个人版介绍:系统内置五大模块:内容的创建和获取功能、存储和管理功能、权限管理功能、访问和查询功能及信息发布功能,安全强大灵活的新闻、产品、下载、视频等基础模块结构和灵活的框架结构,便捷的频道管理功能可无限扩展网站的分类需求,打造出专业的企业信息门户网站。周密的安全策略和攻击防护,全面防止各种攻击手段,有效保证网站的安全。系统在用户资料存储和传递中,
def modify_num(x):
x = 10
print("函数内 x =", x)
num = 5
modify_num(num)
print("函数外 num =", num)
输出:函数内 x = 10 函数外 num = 5说明:x 只是引用了 num 的值,函数内的赋值让 x 指向新对象,不影响外部的 num。
可变对象:表现像“引用传递”
当传递的是可变对象(如列表、字典、集合),函数内部可以通过引用修改对象的内容,这种修改会反映到原始对象上。示例:
def modify_list(lst):
lst.append(4)
print("函数内 lst =", lst)
my_list = [1, 2, 3]
modify_list(my_list)
print("函数外 my_list =", my_list)
输出:函数内 lst = [1, 2, 3, 4] 函数外 my_list = [1, 2, 3, 4]说明:lst 和 my_list 指向同一个列表对象,append 操作修改了该对象,因此外部可见。
关键区别总结
- Python 传递的是对象的引用,不是对象本身,也不是变量的地址。
- 不可变对象:无法修改原对象,函数内的赋值只是改变局部引用。
- 可变对象:可以调用方法修改内容,原对象会被影响。
- 如果在函数中给可变对象重新赋值,也会断开连接:
def reassign_list(lst):
lst = [7, 8, 9] # 创建新列表,不再指向原对象
print("函数内 lst =", lst)
my_list = [1, 2, 3]
reassign_list(my_list)
print("函数外 my_list =", my_list) # 输出 [1, 2, 3]
基本上就这些。记住:Python 传的是引用,但能不能改出效果,取决于对象是否可变。










