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中操作字典之fromkeys()方法的使用
May 21 Python
Python判断Abundant Number的方法
Jun 15 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
Python算术运算符实例详解
May 31 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
详解python while 函数及while和for的区别
Sep 07 Python
python发送告警邮件脚本
Sep 17 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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的pcntl多进程用法实例
2015/03/19 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
WAF的正确bypass
2017/01/05 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
优秀交警事迹材料
2014/01/26 职场文书
秘书英文求职信范文
2014/01/31 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
班主任高考寄语
2015/02/26 职场文书
工作犯错保证书
2015/05/11 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书