python中函数引用包括值传递和引用传递
python中函数的参数是引用传递
- 当形参是不可变对象如:数值、字符串,因为变量不能修改,所以运算不会影响到变量自身
def change(a): # 形参a的引用指向不可变对象
a = a + 1 # 此时内存中开辟一个另一个临时变量a 指向一个新的数值对象
print("此时局部变量a的内存地址:",id(a))
a = 10
print("全局变量a的引用地址:",id(a))
change(a)
print("全局变量a的引用地址:",id(a))
print("a的值:",a) #被调函数不改变实参值
全局变量a的引用地址: 1385196896
此时局部变量a的内存地址: 1385196928
全局变量a的引用地址: 1385196896
a的值: 10
- 当形参是可变对象如:list,函数体中的运算有可能会更改传入的参数变量
def change(a): #形参a的引用指向可变对象list
# 此时也为局部变量开辟了一块内存空间,但存储的是主调函数放进来的实参变量的地址
# 此时被调函数可以改变实际参数的值
a.append([1,2,3])
print("a的引用地址:", id(a))
a = [1,2,3]
print("a的引用地址:", id(a))
change(a)
print("a的引用地址:", id(a))
print("a的值:", a)
a的引用地址: 2300917826632
a的引用地址: 2300917826632
a的引用地址: 2300917826632
a的值: [1, 2, 3, [1, 2, 3]]