一、引用
通过id()来查看变量的引用
可以将id值认为是内存地址的别名
python数据值的传递用引用
赋值运算可以改变变量的引用
# 将数据10存储在变量a中 本质:将数据10所在的内存的引用地址保存在变量a中 a=10 # 将变量a中保存的引用地址给b b=a # 打印变量a,b 引用中存储的值 print(a,b) print(id(a),id(b)) print('-'*10) my_list=[1,2,3] #将列表的引用地址给变量 my_list1=my_list #将变量中存储的引用地址给新 变量 print(my_list1,my_list) print(id(my_list1),id(my_list)) print('-'*10) my_list.append(4) #将4的引用保存在列表中 print(my_list,id(my_list)) print(my_list1,id(my_list1)) print('-'*10) print(f'my_list[2]: {id(my_list[2])}') my_list[2]=5 print(f'my_list[2]: {id(my_list[2])}') print(my_list,id(my_list)) print(my_list1,id(my_list1)) print() print('-'*10)
二、引用做函数参数
函数传参传递的是引用
my_list=[1,2,3] print(id(my_list)) print('-'*10) def func1(a): a.append(4) func1(my_list) print(my_list) print(id(my_list)) print('-'*10) # 只有改变全局变量的引用时,才才使用global def func2(): my_list.append(5) func2() print(my_list) print(id(my_list)) print('-'*10) def func3(): global my_list # 修改全局变量的值 my_list=[1,2,3] func3() print(my_list) print(id(my_list)) print('-'*10) def func4(a): # 对于+=,类似列表的extend 不会改变变量的引用地址 a+=a # print(a) b=10 # b是不可变类型 func4(b) print(b) func4(my_list) print(my_list) print('-'*10)