python中参数传递是值传递还是引用传递

发布时间 2023-11-06 09:27:28作者: 年轻人——001

一,值传递和引用传递的区别是什么

 

值传递和引用传递在内存空间上的主要区别在于参数的存储方式。

值传递(Pass by value)在函数调用时,会创建一个新的内存空间来存储传递的参数值。也就是说,在函数内部对参数的任何修改都仅限于这个新的内存空间,不会影响到原始参数的内存空间。当函数返回时,这个新的内存空间会被销毁。

引用传递(Pass by reference)则不同,它直接使用原始参数的内存地址,没有创建新的内存空间。因此,在函数内部对参数的任何修改都会直接影响到原始参数的内存空间。这种机制使得引用传递在处理大型对象时更加高效,因为它可以避免在函数调用时复制整个对象。当函数返回时,原始参数的内存空间不会被销毁。

 

 

二,python里的参数传递是什么传递

 

1. 不可变对象的参数传递是值传递,因为开辟了新的内存空间

当我们将一个不可变对象作为参数传递给函数时,函数内部无法改变这个对象自身。函数如果对这个参数进行改变,实际上是创建了一个新的对象。

def change(n):
    print(id(n))
    n = 1000
    print(id(n))

x = 3
print(id(x))
change(x)
print(x)

 

在这个例子中,函数 change() 试图改变参数 n。但是因为 n 是一个不可变对象,所以函数内部其实创建了一个新的对象,而原来的对象并没有改变。

2. 可变对象的参数传递是引用传递,因为没有开辟新的内存空间

当我们将一个可变对象作为参数传递给函数时,函数内部可以改变这个对象自身。

def change(n):
    print(id(n))
    n.append(4)

x = [1, 2, 3]
print(id(x))
change(x)
print(x)

 

在这个例子中,函数 change() 改变了参数 n。因为 n 是一个可变对象,所以函数内部的改变影响到了原来的对象。