Python参数传递是传对象引用,不可变对象(如整数、字符串)在函数内修改不影响外部,可变对象(如列表、字典)内容可被修改,因共享引用;为避免修改,应传入副本(如copy或切片)。

在 Python 中,参数传递的方式取决于对象的类型,理解这一点对掌握函数行为很重要。Python 的参数传递既不是纯粹的“值传递”,也不是完全的“引用传递”,而是传递对象的引用(也叫“传对象引用”或“按共享传递”)。
1. 传递不可变对象(如整数、字符串、元组)
当传递不可变对象时,函数内部无法修改原始对象。看起来像“值传递”,因为修改局部变量不会影响外部变量。
示例:def modify_num(x):
x = 10
print("函数内:", x)
num = 5
modify_num(num)
print("函数外:", num)
输出:函数内: 10 函数外: 5说明:x 是对 num 所指向对象的引用,但整数不可变。x = 10 创建了一个新对象,不影响原来的 num。
2. 传递可变对象(如列表、字典)
当传递可变对象时,函数可以修改原对象的内容,因为它们共享同一个对象引用。
示例:def modify_list(lst):
lst.append(4)
print("函数内:", lst)
my_list = [1, 2, 3]
modify_list(my_list)
print("函数外:", my_list)
输出:函数内: [1, 2, 3, 4] 函数外: [1, 2, 3, 4]说明:lst 和 my_list 指向同一个列表对象,append 操作修改了原对象。
3. 如何避免意外修改可变对象
如果你不希望函数修改原始数据,可以在传参时传入副本。
本文档主要讲述的是Android_Intent详解;Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity
立即学习“Python免费学习笔记(深入)”;
使用切片或 copy 方法创建副本:
modify_list(my_list.copy()) # 传副本 modify_list(my_list[:]) # 列表切片也是副本这样函数内的修改不会影响原始列表。
4. 关键点总结
- Python 传递的是对象的引用,不是对象本身。
- 不可变对象:函数内重新赋值不影响外部。
- 可变对象:函数内修改内容会影响外部。
- 想保护原始数据?传副本(copy 或切片)。
基本上就这些。关键是理解“引用”和“可变性”的关系。










