Python 值传递与地址传递总结
文章目录
- 一、复习巩固
- 1.值传递
- 2.地址传递
- 二、代码实例讲解:
- 三、归纳总结
一、复习巩固
首先我们复习一下什么叫做值传递,什么叫做地址传递
1.值传递
在实参向形参传递的过程中,传递的只是实参的值,而在函数体操作的时候,实际操作的并不是实参而是形参,所以,值传递不改变原变量值
2.地址传递
在实参向形参传递的过程中,传递的是实参的地址,实参和形参共同指向同一块地址,所以,在函数内部修改形参的同时也修改了实参,即,地址传递会改变原变量
二、代码实例讲解:
#值传递a = 2
def valueTransmit(x):print('x没有修改之前的值:{}'.format(x))print('x没有修改之前的地址:{}\n'.format(id(x)))x = 3print('x修改之后的值:{}'.format(x))print('x修改之后的地址:{}\n'.format(id(x)))pass
passprint('a没有传递之前的值:{}'.format(a))
print('a没有传递之前的地址:{}\n'.format(id(a)))
valueTransmit(a)
print('a传递之后的值:{}'.format(a))
print('a传递之后的地址:{}'.format(id(a)))#运行结果:
a没有传递之前的值:2
a没有传递之前的地址:23031952x没有修改之前的值:2
x没有修改之前的地址:23031952x修改之后的值:3
x修改之后的地址:23031968a传递之后的值:2
a传递之后的地址:23031952
这里证明a的传递是值传递,函数内部对a的改变对他没有丝毫影响
#地址传递
listA = []
def addressTransmit(x):print('x没有修改之前的地址:{}'.format(id(x)))print('x没有修改之前的值:{}\n'.format(x))x.append([1,2,3,4])print('x修改之后的地址:{}'.format(id(x)))print('x修改之后的值:{}\n'.format(x))pass
passprint('listA传递之前的地址:{}'.format(id(listA)))
print('listA传递之前的值:{}\n'.format(listA))
addressTransmit(listA)print('listA传递之后的地址:{}'.format(id(listA)))
print('listA传递之后的值:{}'.format(listA))#运行结果:
listA传递之前的地址:33668040
listA传递之前的值:[]x没有修改之前的地址:33668040
x没有修改之前的值:[]x修改之后的地址:33668040
x修改之后的值:[[1, 2, 3, 4]]listA传递之后的地址:33668040
listA传递之后的值:[[1, 2, 3, 4]]
这里证明listA的传递是地址,函数直接对原来的变量进行操作,所以listA最终的值改变了。
三、归纳总结
1.函数传参过程中,对于一些基本数据类型,如int(整型),float(浮点型),str(字符串)等,是值传递,函数内部对以上数据类型的数据进行修改时并不会改变原值。
2.对于list(列表)、dict(字典)、tuple(元组)则是地址传递,函数内部对以上数据类型操作时会改变原数据值。
Python 值传递与地址传递总结相关推荐
- 值传递 和 地址传递 的区别(好多句话才可以说清)
要知道什么是**值传递**和**地址传递**,首先要知道什么是**基本数据类型**和**引用类型**. Java的基本数据类型就八种(除了这八种之外都是引用类型):◆整型:byte(8位) short ...
- java 引用传递_详解java的值传递、地址传递、引用传递
详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...
- Go 结构体的值传递和地址传递
Go 结构体的值传递和地址传递 package mainimport "fmt"type student struct {id intname stringsex byteage ...
- java能传地址吗,详解java的值传递、地址传递、引用传递
一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前的理解,java中基本数据类型是值传递,对 ...
- 对几种传递的理解:值传递,地址传递,引用传递
对几种传递的理解:值传递,地址传递,引用传递 因为会用到形参和实参的概念,区别一下,形参 即在定义函数时 int add(int a , int b)中a,b,即为形参.而当调用时int(3,4)中3 ...
- JavaScript学习(七十九)—值传递和地址传递
JavaScript学习(七十九)-值传递和地址传递 一.值传递 二.地址传递
- c/c++ 实参、形参、值传递、地址传递的区别与关系 ---- 授人以鱼不如授人以渔
函数的传递过程详解: 值传递:将原始对象的值传递给目标.程序会为目标开辟一个完全相同的内存空间,并将原始对象copy到目标中,之后对目标内存进行修改.所以目标的修改并不会影响原始对象,因为原始对象和目 ...
- C++函数参数传递--值传递和地址传递
直接上代码: //函数参数的传递 //值传递和地址传递.值传递是将实参传递给函数之后,系统建立了一个实参的副本,其值和实参相同. //值传递无法改变实参的值,改变的只是实参的副本,如: #includ ...
- C语言中函数参数传递的方式:值传递,地址传递
** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...
最新文章
- 编程菜鸟的日记-初学尝试编程-寻找2到n之间的素数并输出
- linux 分区表dd,dd复制分区后目标分区的大小变成原分区了
- Ubuntu 中Eclipse 默认的OpenJDK 和 SUNJDK问题总结
- 巨蟒python全栈开发flask11项目开始3
- IOI 2007 Sail (线段树+贪心)
- 线程同步机制:互斥量、信号量、读写锁、条件变量
- 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
- query登录linux命令,在Linux系统中使用sqlcmd命令连接与查询SQL Server
- 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...
- 计算机科学全程,EduGlobalB2B德保罗大学金融计算机科学硕士桥梁STEM全程免GREGMAT...
- swing tree 去掉双击默认展开 关闭_如何保护自己的电脑,关闭危险端口(一)
- HashMap底层数据结构详解
- php+mysql任务网源码
- 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
- python屏幕文字识别_python识别图片文字
- lisp 获取横断面数据_基于Visual LISP全路线横断面数据自动提取
- 计算机固态加机械硬盘,在台式机中添加固态/机械硬盘驱动器,让我与这篇文章一起教你...
- 你的另一半眼泪流给谁
- 用qq的功能进行屏幕录制
- 现代通信网(第1章 绪论)