Python每天3分钟 – #037传值(value)还是传引用(reference)?

欢迎访问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的对象,到时候再次谈到参数的传递问题。

原文链接:http://www.zsiss.com/5335.html,转载请注明出处。

0

评论0

请先

爱分享推出ChatGPT国内镜像,无需魔法直接用!写文章,写代码,做PPT,做网站原创软文效果好到爆炸 https://chat.gcrup.com

社交账号快速登录