函数参数传递是值传递还是引用传递

在python中没有指针,引用,对象本身之分。任何变量都是一个对象的引用, 指向实际的对象,都是对象的引用。

在函数参数传递时,都是传递的是变量的值,而不是传递的引用,都是通过值传递的。 在函数体内部会根据参数来创建局部变量。

对于不可变的数据类型来说,如果这些局部修改了,就是新创建一个对象,将函数的 局部变量指向一个新的对象。对函数外面的变量不受任何影响。

如果是可变数据类型。如果我们修改的是对象的一部分,那修改就是对函数外面的 对象的修改;如果直接对变量进行赋值,则产生了一个新对象,则不会对被 调用的对象产生影响。

我们举一个例子来说明:

def fn(name, info):
    print ("name:", name)
    print ("info", info) # info, name均为局部变量
    name="tianjin"  #函数体之外的name没有发生改变,这里新创建了一个对象。
    info[0]=1300    #函数体之外的info对象发生了改变
    info=[1, 1]     #新创建一个对象,并赋值给info变量。

name="beijing"
info=[2300, 1200]

print(name, info)
fn(name, info)
print(name, info)

"""
输出内容为:
beijing [2300, 1200]
name: beijing
info [2300, 1200]
beijing [1300, 1200]
"""