文章目录

  • 一、复习巩固
    • 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 值传递与地址传递总结相关推荐

  1. 值传递 和 地址传递 的区别(好多句话才可以说清)

    要知道什么是**值传递**和**地址传递**,首先要知道什么是**基本数据类型**和**引用类型**. Java的基本数据类型就八种(除了这八种之外都是引用类型):◆整型:byte(8位) short ...

  2. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  3. Go 结构体的值传递和地址传递

    Go 结构体的值传递和地址传递 package mainimport "fmt"type student struct {id intname stringsex byteage ...

  4. java能传地址吗,详解java的值传递、地址传递、引用传递

    一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前的理解,java中基本数据类型是值传递,对 ...

  5. 对几种传递的理解:值传递,地址传递,引用传递

    对几种传递的理解:值传递,地址传递,引用传递 因为会用到形参和实参的概念,区别一下,形参 即在定义函数时 int add(int a , int b)中a,b,即为形参.而当调用时int(3,4)中3 ...

  6. JavaScript学习(七十九)—值传递和地址传递

    JavaScript学习(七十九)-值传递和地址传递 一.值传递 二.地址传递

  7. c/c++ 实参、形参、值传递、地址传递的区别与关系 ---- 授人以鱼不如授人以渔

    函数的传递过程详解: 值传递:将原始对象的值传递给目标.程序会为目标开辟一个完全相同的内存空间,并将原始对象copy到目标中,之后对目标内存进行修改.所以目标的修改并不会影响原始对象,因为原始对象和目 ...

  8. C++函数参数传递--值传递和地址传递

    直接上代码: //函数参数的传递 //值传递和地址传递.值传递是将实参传递给函数之后,系统建立了一个实参的副本,其值和实参相同. //值传递无法改变实参的值,改变的只是实参的副本,如: #includ ...

  9. C语言中函数参数传递的方式:值传递,地址传递

    ** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...

最新文章

  1. 编程菜鸟的日记-初学尝试编程-寻找2到n之间的素数并输出
  2. linux 分区表dd,dd复制分区后目标分区的大小变成原分区了
  3. Ubuntu 中Eclipse 默认的OpenJDK 和 SUNJDK问题总结
  4. 巨蟒python全栈开发flask11项目开始3
  5. IOI 2007 Sail (线段树+贪心)
  6. 线程同步机制:互斥量、信号量、读写锁、条件变量
  7. 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
  8. query登录linux命令,在Linux系统中使用sqlcmd命令连接与查询SQL Server
  9. 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...
  10. 计算机科学全程,EduGlobalB2B德保罗大学金融计算机科学硕士桥梁STEM全程免GREGMAT...
  11. swing tree 去掉双击默认展开 关闭_如何保护自己的电脑,关闭危险端口(一)
  12. HashMap底层数据结构详解
  13. php+mysql任务网源码
  14. 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
  15. python屏幕文字识别_python识别图片文字
  16. lisp 获取横断面数据_基于Visual LISP全路线横断面数据自动提取
  17. 计算机固态加机械硬盘,在台式机中添加固态/机械硬盘驱动器,让我与这篇文章一起教你...
  18. 你的另一半眼泪流给谁
  19. 用qq的功能进行屏幕录制
  20. 现代通信网(第1章 绪论)

热门文章

  1. 华一银行开发安全内部培训圆满结束
  2. 最近安装了win2008R2,界面比win2003友好多了
  3. 使用pycharm调试Python代码时F8快捷键失效
  4. HLS-搭建Nginx流媒体服务器
  5. unix网络编程——ioctl 函数的用法详解
  6. OpenGL 关于旧版glut和新版本glfw和glad的环境配置
  7. Python-面向对象编程
  8. 论文笔记:Geo-CNN
  9. Kinect学习(四):提取深度数据
  10. Android Studio中安装OpenCV SDK