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的迭代器和生成器使用实例
Jan 14 Python
详解Python的Django框架中的模版继承
Jul 16 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
Django ORM 查询管理器源码解析
Aug 05 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
PyQt5实现登录页面
May 30 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
python实现大文本文件分割成多个小文件
Apr 20 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
请php正则走开
2008/03/15 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
人机交互程序 python实现人机对话
2017/11/14 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
什么是Python包的循环导入
2020/09/08 Python
python关于倒排列的知识点总结
2020/10/13 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
护理个人求职信范文
2014/01/08 职场文书
项目合作意向书模板
2014/07/29 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
redis数据结构之压缩列表
2022/03/21 Redis