Python 值传递与地址传递总结
文章目录一、复习巩固1.值传递2.地址传递二、代码实例讲解:三、归纳总结一、复习巩固首先我们复习一下什么叫做值传递,什么叫做地址传递1.值传递在实参向形参传递的过程中,传递的只是实参的值,而在函数体操作的时候,实际操作的并不是实参而是形参,所以,值传递不改变原变量值2.地址传递在实参向形参传递的过程中,传递的是实参的地址,实参和形参共同指向同一块地址,所以,在函数内部修改形参的同时也修改了实参,即
·
一、复习巩固
首先我们复习一下什么叫做值传递,什么叫做地址传递
1.值传递
在实参向形参传递的过程中,传递的只是实参的值,而在函数体操作的时候,实际操作的并不是实参而是形参,所以,值传递不改变原变量值
2.地址传递
在实参向形参传递的过程中,传递的是实参的地址,实参和形参共同指向同一块地址,所以,在函数内部修改形参的同时也修改了实参,即,地址传递会改变原变量
二、代码实例讲解:
#值传递
a = 2
def valueTransmit(x):
print('x没有修改之前的值:{}'.format(x))
print('x没有修改之前的地址:{}\n'.format(id(x)))
x = 3
print('x修改之后的值:{}'.format(x))
print('x修改之后的地址:{}\n'.format(id(x)))
pass
pass
print('a没有传递之前的值:{}'.format(a))
print('a没有传递之前的地址:{}\n'.format(id(a)))
valueTransmit(a)
print('a传递之后的值:{}'.format(a))
print('a传递之后的地址:{}'.format(id(a)))
#运行结果:
a没有传递之前的值:2
a没有传递之前的地址:23031952
x没有修改之前的值:2
x没有修改之前的地址:23031952
x修改之后的值:3
x修改之后的地址:23031968
a传递之后的值:2
a传递之后的地址:23031952
这里证明a的传递是值传递,函数内部对a的改变对他没有丝毫影响
#地址传递
listA = []
def addressTransmit(x):
print('x没有修改之前的地址:{}'.format(id(x)))
print('x没有修改之前的值:{}\n'.format(x))
x.append([1,2,3,4])
print('x修改之后的地址:{}'.format(id(x)))
print('x修改之后的值:{}\n'.format(x))
pass
pass
print('listA传递之前的地址:{}'.format(id(listA)))
print('listA传递之前的值:{}\n'.format(listA))
addressTransmit(listA)
print('listA传递之后的地址:{}'.format(id(listA)))
print('listA传递之后的值:{}'.format(listA))
#运行结果:
listA传递之前的地址:33668040
listA传递之前的值:[]
x没有修改之前的地址:33668040
x没有修改之前的值:[]
x修改之后的地址:33668040
x修改之后的值:[[1, 2, 3, 4]]
listA传递之后的地址:33668040
listA传递之后的值:[[1, 2, 3, 4]]
这里证明listA的传递是地址,函数直接对原来的变量进行操作,所以listA最终的值改变了。
三、归纳总结
1.函数传参过程中,对于一些基本数据类型,如int(整型),float(浮点型),str(字符串)等,是值传递,函数内部对以上数据类型的数据进行修改时并不会改变原值。
2.对于list(列表)、dict(字典)、tuple(元组)则是地址传递,函数内部对以上数据类型操作时会改变原数据值。
更多推荐
已为社区贡献6条内容
所有评论(0)