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读文件逐行处理的示例代码分享
Dec 27 Python
Python实现过滤单个Android程序日志脚本分享
Jan 16 Python
Python fileinput模块使用实例
Jun 03 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
Python坐标线性插值应用实现
Nov 13 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python游戏开发Pygame框架
Apr 22 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
ajax缓存问题解决途径
2006/12/06 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python解析最简单的验证码
2016/01/07 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
安全大检查反思材料
2014/01/31 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
银行转正自我鉴定
2014/09/29 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
见习报告格式范文
2014/11/08 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle