python基础入门教程:传参是传值还是传引用

在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象。而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的。例如,a = []是一个空列表对象,变量 a 是该对象的一个引用
例1

def test(c):
 c.append("hello world")
 print(c,id(c))
 return
list = [1,2]
test(list)
print(list,id(list))

输出

[1, 2, 'hello world'] 2463790879240
[1, 2, 'hello world'] 2463790879240

在执行test函数前,列表list和参数c都指向同一个对象,执行test时并没有重新赋值,也没有新的指向过程,append方法只是对列表对象插入一个元素,对象还是原来的对象,只是对象里面的内容变了,因为参数c和列表list都是绑定同一个对象上,执行c.append和list.append方法本质都是对一个对象进行操作,因此list列表在调用函数后发生了变化,但id没变,还是原来那个对象。因此,如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

例2

#Python学习交流群:778463939

def test2(p):
p = "i in test2"
print(p,id(p))
str = "hello word"
test2(str)
print(str,id(str))

输出:

i in test2 2885210784112
hello word 2885210784048

id不一样,所以说不是同一个对象,也就是说我们传的还是引用。因此,如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

总结:

Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

(0)

相关推荐

  • 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  • 可变对象与不可变对象

    前阵子我们聊了下函数的参数传递以及变量赋值的一些内容:关于函数参数传递,80%人都错了. 简单回顾下要点: 1. Python 中的变量不是装有对象的"容器",而是贴在对象上的&q ...

  • 集锦 | 53个Python面试问题 答案打包带走

    作者丨Chris 来源丨AI科技大本营(ID:rgznai100) 链接丨https://towardsdatascience.com/53-python-interview-questions-an ...

  • Python有哪些函数?Python基础入门教程

    Python函数,一般指组织好的.可重复使用的.用来实现单一或相关联功能的代码段,Python函数包含系统中自带的一些函数.第三方函数以及用户自定义的函数.那么Python有哪些函数呢?为了方便大家记 ...

  • Python基础入门教程:类与类之间的关系

    打开QQ浏览器,查看高清大图 一.类与类之间的依赖关系 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类,那事物之间存在着相对应的关系,类与类之间也同样如此,在面向对 ...

  • Python零基础入门教程之语法入门运算符一

    https://m.toutiao.com/is/e8odnt1/ 在上一章中我们知道了什么是变量,了解了变量的定义.变量的命名规则以及变量的赋值.下面让我们一个个来学习Python的运算符. 什么是 ...

  • Python爬虫入门教程(十四):爬取有声小说网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  • 什么是Python表达式?Python基础入门

    初学Python的时候,大家都会接触到各种专业术语,比如说表达式.语句等,那么你知道什么是Python表达式吗?Python表达式由什么构成呢?想要知道,这篇文章你一定要看. Python表达式由什么 ...

  • Python爬虫入门教程:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理.   基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests p ...

  • 最详细的素描基础入门教程,全整理好了,美术生必看!

    很多新人朋友问我怎么学画画,这个不是一句半句能解释清楚的. 想系统学习,还是需要方法与技巧的. 今天,我就分享一套讲解特别详细的素描基础入门教程资料,新人朋友一定要好好看,收藏好了! 来源网络.侵删, ...

  • Python爬虫入门教程02:笔趣阁小说爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文 01.python爬虫入门教程01:豆瓣Top电影爬取 基本开发环境 Python 3 ...

  • Python爬虫入门教程01:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...