Python中 传递值 和 传递引用 的区别解析


Posted in Python onFebruary 22, 2018

对于不可变类型传递值(不会影响原数据)

Python中 传递值 和 传递引用 的区别解析 

不可变类型

对于可变类型传递引用(会影响原数据)

Python中 传递值 和 传递引用 的区别解析 

不可变类型传递引用

python3不可变类型

  • Number(数字)
  • String(字符串)
  • Tuple (元组)

python3可变类型

  • List(列表)
  • Dictionary (字典)
  • Sets(集合)

参数传递的思考

  • 我们声明的变量名可以看做便签
  • 为变量名赋值的操作可以看做将标签贴到"值"的表面(值可以是可变类型,和不可变类型)

以链表中的节点对象为例(实例化的节点对象为不可变类型, 但对象中的属性是可变的)

Python中 传递值 和 传递引用 的区别解析 

链表对象

class NodeList(object):
  def __init__(self, val):
    self.val = val
    self.next = None
# 遍历链表
def traverse_nodes(head):
  tmp = head
  while tmp:
    print("节点id为:", id(tmp), "节点的值为:", tmp.val, )
    tmp = tmp.next
# 创建链表
def create_node_list():
  head = NodeList(0);
  left_p = head
  print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
  left_p.next = NodeList(1);
  left_p = left_p.next
  print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)  
  left_p.next = NodeList(2);
  left_p = left_p.next
  print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
  left_p.next = NodeList(3);
  left_p = left_p.next
  print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
  return head
def main():
  # 创建链表
  print("==>创建链表函数中:")
  head = create_node_list()
  print("==>在遍历函数中:")
  traverse_nodes(head)
if __name__ == '__main__':
  main()

总结

以上所述是小编给大家介绍的Python中 传递值 与 传递引用 的区别解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python找出文件中使用率最高的汉字实例详解
Jun 03 Python
利用Python读取文件的四种不同方法比对
May 18 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python多任务及返回值的处理方法
Jan 22 Python
Python count函数使用方法实例解析
Mar 23 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
python - asyncio异步编程
Apr 06 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 #Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 #Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 #Python
基于Django用户认证系统详解
Feb 21 #Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 #Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 #Python
python中abs&map&reduce简介
Feb 20 #Python
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
PHP实现的简单日历类
2014/11/29 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
JS的get和set使用示例
2014/02/20 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
QML实现钟表效果
2020/06/02 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
幼儿园教师师德承诺书
2015/04/28 职场文书
高一军训感想
2015/08/07 职场文书
吃通javascript正则表达式
2021/04/21 Javascript