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判断变量是否已经定义的方法
Aug 18 Python
介绍Python中的fabs()方法的使用
May 14 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
Django objects的查询结果转化为json的三种方式的方法
Nov 07 Python
用python实现刷点击率的示例代码
Feb 21 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python编写冷笑话生成器
Apr 20 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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结合PHP代码实现登录效果代码
2008/07/25 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
JSONP 跨域共享信息
2012/08/16 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python与idea的集成的实现
2020/11/20 Python
财务会计专业应届毕业生求职信
2013/10/18 职场文书
青年文明号口号
2014/06/17 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
个园导游词
2015/02/04 职场文书
《海上日出》教学反思
2016/02/23 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL