Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象

Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象


文章目录

  • Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象
  • 前言
  • 一、参数的传递
  • 二、传递可变对象的引用
  • 三、传递不可变对象的引用
  • 总结

前生篇:局部变量和全局变量_效率测试


前言

Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象_第1张图片


一、参数的传递

  • 函数的参数传递本质上就是:从实参到形参的赋值操作。 Python 中“一切皆对象”,所有的赋值操作都是“引用的赋值”。所以,Python 中参数的传递都是“引用传递”,不是“值传递”。具体操作时分为两类:
  1. 对“可变对象”进行“写操作”,直接作用于原对象本身。
  2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。(起到其他语言的“值传递”效果,但不是“值传递”)
  • 可变对象有:

字典、列表、集合、自定义的对象等

  • 不可变对象有:

数字、字符串、元组、function 等

Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象_第2张图片

二、传递可变对象的引用

  • 传递参数是可变对象(例如:列表、字典、自定义的其他可变对象等),实际传递的还是对象的引用。在函数体中不创建新的对象拷贝,而是可以直接修改所传递的对象。
  • 参数传递:传递可变对象的引用

代码演示:

a = [1,2]
def f1(m):
    print('m',id(m))    # a和m是同一个对象
    m.append(3)         # 由于m是可变对象,不创建对象拷贝,直接修改这个对象

f1(a)
print('a',id(a))
print(a)
------------------------------
m 2152263356096
a 2152263356096
[1, 2, 3]

三、传递不可变对象的引用

  • 传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。
  • 参数传递:传递不可变对象的引用

代码演示:

a = 1
def f1(n):
    print('n',id(n))    # 传递进来的是a对象的地址
    n = n+2             # 由于a是不可变对象,因此创建新的对象n
    print('n',id(n))    # n 已经变成了新的对象
    print(n)

f1(a)
print('a',id(a))
-------------------------------------
n 140720773142176
n 140720773142240
3
a 140720773142176
  • 显然,通过 id 值我们可以看到 n 和 a 一开始是同一个对象。给 n 赋值后,n 是新的对象。

总结

以上帮各位总结好了,收藏,关注即可查收。

前生篇:局部变量和全局变量_效率测试


关注下方公众号,免费拿Python学习资料!!!

Python入门基础篇 No.56 —— 参数的传递_传递可变对象_传递不可变对象_第3张图片

你可能感兴趣的:(#,基础,字符串,列表,python,编程语言,经验分享)