欢迎访问Python每天3分钟系列。
每天花3分钟时间,学习或温习一个Python知识点。
今天是第037篇:
传值(value)还是传引用(reference)?
昨天我们聊了mutable和imuutable,也聊了Python中的几个immutable对象:
-
整数int -
浮点数float -
字符串str -
布尔值bool -
元组tuple
immutable意味着一旦创建,永不改变。 那对写代码来说,到底意味着什么呢?
这就引入了另一个编程的问题:函数传值还是传对象?
看代码:
def func1():
name = '张三'
print('func1: {}'.format(name))
func2(name)
print('func1: {}'.format(name))
def func2(name):
print('func2: {}'.format(name))
name = '李四'
print('func2: {}'.format(name))
func1()
输出结果:
func1: 张三
func2: 张三
func2: 李四
func1: 张三
我们来看一下过程:
-
func1中定义的name是张三 -
然后func1把name传给了func2 -
虽然func2中把name修改成了李四 -
但func1中的name仍然是张三
这是因为func1给func2传递的是指向对象”张三“的引用。
当func2把name修改为”李四“的时候,因为字符串是immutable的,所以”李四“是一个新的对象。
所以这时候func2指向了新对象”李四“,而func1还是指向老的对象”张三“,所以这个改变不会影响func1中的后续打印结果。
这样看起来好像Python是传递了一个值过去,但实际上Python传递的是引用。但由于字符串是immutable的,它不可能改变func1中的值。
今天要开始长途驾驶回老家,就先写到这里吧。如果你也在外地,过年回老家吗?
下一篇我们谈Python的mutable的对象,到时候再次谈到参数的传递问题。
原文链接:https://www.afxvip.com/5335.html,转载请注明出处。
评论0