cylind blog

Official

python函数中的参数传递


python函数中传入数值或者字符串等不可变类型时,在函数内修改传入参数的值,传入的参数的在原始值并不会跟着变,但是当你传入的是列表、字典等可变类型的数据时,在函数内修改他们的值,这些变量的原始值会跟着一块变。

a = 3
b = [1, 2, 3]
def foo(x1,x2):
    print(id(x1),id(x2))
    x1 += 1
    x2.append(4)
    print(f"{id(x1)} {x1} \n{id(x1)} {x2}")

print(id(a),a)
print(id(b),b)
foo(a,b)
print(id(a),a)
print(id(b),b)

'''
140715638874832 3
1566903090312 [1, 2, 3]
140715638874832 1566903090312
140715638874864 4 
140715638874864 [1, 2, 3, 4]
140715638874832 3
1566903090312 [1, 2, 3, 4]
'''

python函数中的参数传入既不是传数值也不是传引用,而是直接传入name,也就是标识符。

参考:

https://www.zhihu.com/question/20591688

https://www.quora.com/Are-arguments-passed-by-value-or-by-reference-in-Python

http://effbot.org/zone/python-objects.htm