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

声明:本网站资源来源于网络收集,如有侵权,请联系站长进行删除处理。 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解。本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。反馈邮箱:1159995880@qq.com