python中的值传递和引用传递

可参考链接:Python3 函数 | 菜鸟教程 (runoob.com)

在Python中,参数传递可以被视为一种"传值"机制,但这种"传值"与一些其他语言中的传值有所不同,特别是涉及到可变和不可变类型时。以下是对Python中值传递和引用传递的详细解释:

值传递(Immutable Objects)

对于不可变类型(如整数、浮点数、字符串、元组等),当你将它们作为参数传递给函数时,实际上是传递了它们的值的一个副本。这意味着函数接收到的是这个值的副本,而不是原始对象的引用。因此,函数内部对这个参数的修改不会影响到原始对象。

def modify_value(a):
    a = 10

x = 5
modify_value(x)
print(x)  # 输出: 5

在这个例子中,函数modify_value修改了参数a的值,但这个修改不影响原始变量x,因为ax值的一个副本。

引用传递(Mutable Objects)

对于可变类型(如列表、字典、集合等),当你将它们作为参数传递给函数时,实际上是传递了它们的引用的副本。这个引用指向内存中相同的对象。因此,如果你通过这个引用修改了对象,这种修改会影响到所有引用这个对象的变量。

示例:

def modify_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 输出: [1, 2, 3, 4]

在这个例子中,my_list被传递给函数modify_list,函数内部对列表进行了修改。由于列表是可变的,这个修改也反映在了原始的my_list上。

重要区别

  • 不可变类型:函数内部对参数的修改不会影响原始对象,因为参数是原始值的副本。
  • 可变类型:函数内部对参数的修改会影响原始对象,因为参数是指向原始对象的引用的副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值