函数传参
传递可变数据类型参数
a=[1,2,3] #内存中会根据给定的值动态创建一块内存对象给数据类型为列表的值[1,2,3]的对象,并创建一个指向该对象的内存地址(变量a)
def func(a): #将变量a作为函数的参数
print(id(a)) #打印变量a的内存地址
a[1]=4 #修改变量a的内存地址对应的内存空间中存放的对象(列表的下标为1的元素)
print(id(a)) #重新打印对象a的内存地址
return a #返回变量a的值
result=func(a) #将函数的执行结果赋值给result
print(result) #打印函数的返回值
传递不可变类型参数
a=1 #内存中会根据给定的值动态创建一块内存对象给数据类型为整数的数值1的对象,同时创建一个指向该内存对象的内存地址(变量a)
def func(a): #定义函数func,把变量a作为函数的参数,这里的a是已经赋值过的数值1的内存地址引用
id(a) #查看变量a的内存地址(这里显示的肯定是数值为1的地址值)
a=2 #由于数值是不可变的类型参数,无法从内存空间中对对象为1的数值进行修改,所以会另外创建一块内存空间给数据类型为整数2的内存对象,此时a的内存地址变量数值为2的内存地址了
id(a) #这里显示的为内存对象2的内存地址了
return a #返回变量a的值
result=func(a) #将函数的返回值(这里为重新创建的a变量的指向数值2的内存地址)赋值给变量result
print(a) #打印变量a的值(这里是函数内给a重新赋值2前的a变量的指向数值1的内存地址
#这个是函数传参的机制,会通过区分数据类型是否为可变的前提下判断参数的值是可以修改还是重新创建,函数内部继续创建a变量,和外部的a的值不一样也说明了函数的封装性,把内部的a和外部的a隔离了,这两个a已经不是同一个了