前提:

1、Python 中万物皆为对象,变量以引用的方式指向对象。
2、身份

2.1 可变对象:对象的内存值可以被改变,引用变量改变后,实际上是其所指向的值发生了变化,当前这块内存区域中存放的内容发生了改变,包括:list dict set;

2.2 不可变对象:对象的内存值不能被改变,如果变量引用了不可变的对象,当改变该变量时,由于其所指向的对象的值不能都被改变,因此需要把原来的值复制出来一份后再改变;即在内存中开辟一块新的区域,变量再指向这个新的区域地址,那么变量就引用了新的对象,包括:tuple string int float bool

值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间来存放由主调函数放进来的实参的值,从而想成为了实参的一个副本。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

示例:

def ChangeInt(a):a = 10print('函数内a的内存地址:',id(a))
a = 2
print('执行函数前,a的内存地址:', id(a))
ChangeInt(a)
print('执行函数后,a的内存地址:', id(a))
print('a =',a)

执行结果:

执行函数前,a的内存地址: 8791093155632
函数内a的内存地址: 8791093155888
执行函数后,a的内存地址: 8791093155632
a = 2

可以看出,实参a的变量引用前后未发生变化。形参a指向了内存中的新地址。

引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做任何的操作都影响了主调函数中的实参变量。

示例:

def changeme(mylist):mylist.append([1,2,3,4])print("函数内取值: ", mylist)print('函数内的内存地址:',id(mylist))return
mylist = [10,20,30]
changeme(mylist)
print("函数外取值: ",mylist)
print('函数外的内存地址:', id(mylist))

执行结果:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数内的内存地址: 34405056
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外的内存地址: 34405056

可以看出,形参的变化影响了实参。实参、形参指向了内存中的同一个地址。

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

Python参数传递:值传递和引用传递相关推荐

  1. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  2. Python学习:Python中参数传递,是值传递,引用传递or其它

    本博客主要学习python参数传递机制,了解python的参数是如何传递的.学过其它语言如(C,C++),都知道参数传递有值传递和引用传递,python的参数传递属于哪种? 一.值传递和引用传递 值传 ...

  3. list修改元素的值_第115天:Python 到底是值传递还是引用传递

    我们平时写的 Python 程序中充斥着大量的函数,包括系统自带函数和自定义函数,当我们调用函数时直接将参数传递进去然后坐等接收返回值即可,简直不要太好用.那么你知道函数的参数是怎么传递的么,是值传递 ...

  4. python是值传递还是引用传递_Python里参数是值传递还是引用传递?

    Python就是把一些参数从一个函数传递到另一个函数,从而使其执行相应的任务.但是你有没有想过,参数传递的底层是如何工作的,原理又是怎样的呢? 实际工作中,很多人会遇到这样的场景:写完了代码,一测试, ...

  5. python引用传递和值传递的区别_Python 值传递和引用传递

    值传递和引用传递 python的值传递不会改变传入参数的值,而引用传递传入的是一个地址,有点类似c的指针,在执行完成之后会改变传入地址所指的值. 值传递类型如下: 上面的代码只是将a的值作为参数传递进 ...

  6. Python值传递还是引用传递

    Python值传递还是引用传递 Python作为一门动态语言,变量本身的类型是不固定的,因此更加灵活.那Python到底是值传递还是引用传递呢? 问题引出 本人在本周写代码时,遇到这么一个让我注意的问 ...

  7. python中的值传递和引用传递

    今天和大家分享python中很重要的一个知识点:参数传递,其中包括值传递和引用传递. 目录 一.为什么要熟悉值传递和引用传递 1.1 值传递 1.2 引用传递 二.Python变量及其赋值 三.Pyt ...

  8. Python值传递和引用传递(详细分析)

    目录 1. 形参与实参 2. Python的数据类型 3.Python变量及其赋值 3.1 不可变对象赋值 3.2 可变对象赋值 3.3 变量删除 3.4 变量赋值总结 4.Python函数的参数传递 ...

  9. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

  10. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

    <Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...

最新文章

  1. Hive存储过程实现-hpsql
  2. 动态嵌套游标解决方案
  3. request获得请求参数
  4. 解决orcale报ORA-28001: the password has expired
  5. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】
  6. 交叉编译HTOP并移植到ARM嵌入式Linux系统
  7. mysqldump 使用备忘
  8. python图表制作方法_python图表制作
  9. Boost PFC参数计算——交流电的基本概念与推导
  10. 使用.NET Core和Vue搭建WebSocket聊天室
  11. 18款室内设计风格,总有一款适合你。
  12. xp 无法关闭计算机,电脑xp系统关不了机,一直显示在正在关机为什么 除了重装,还能怎么办...
  13. 物联网早期森林火灾探测
  14. 动手学深度学习(pytorch)中d2lzh_pytorch包的安装(附资源)
  15. Python网络爬虫和信息提取
  16. ant调用cmd命令行
  17. VB中使用DirectX库的简明教程(3)
  18. Java 正则表达式(深度长文)
  19. 怎么下载全国省市县行政区划边界
  20. 向量几何在游戏编程中的使用一

热门文章

  1. node+vue基于微信小程序的乐团团购系统的设计与实现
  2. Linux发行版概览
  3. 刚入行大数据的海归分享他的工作经历
  4. IOS中忽略警告的三种方法
  5. 鸿蒙系统能在欧洲使用吗,华为能否在欧洲发布鸿蒙系统,然后民间人士推出一键换装安卓?...
  6. 宽带接入与无线网络(学习笔记一)——VLAN原理
  7. 计算机毕业设计ssm绘本馆管理系统n5wn5系统+程序+源码+lw+远程部署
  8. 怀孕用计算机来算周期怎么算,怀孕周期怎么计算
  9. HTML+CSS初学者练习项目3:利用table+CSS制作《互联世纪网》
  10. 苏宁citus分布式数据库应用实践