Python中 传递值 与 传递引用 的区别

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

不可变类型

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

不可变类型传递引用

python3不可变类型

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

python3可变类型

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

参数传递的思考

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

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

链表对象

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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

Java 可变参数 原

11230
来自专栏Hongten

java内部类_让你一看就明白_再也不用困惑啦

在一篇blog:“java内部类的作用分析”中你可以了解java内部类的一些东西,不过内部类中还有一些地方值得我们细心研究...

28020
来自专栏Golang语言社区

Golang语言社区--Go语言基础第三节常量

大家好,我是彬哥;今天继续我们的基础课程的讲解,本篇给大家讲解的是关于Go语言常量的知识。那么在编程语言中何为常量?常量解释如下:

500220
来自专栏C语言及其他语言

【编程经验】结构体的定义和使用

结构体的定义和使用 结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。 ...

364120
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享P...

8810
来自专栏微信公众号:Java团长

Java基础01 从HelloWorld到面向对象

Java是完全面向对象的语言。Java通过虚拟机的运行机制,实现“跨平台”的理念。我在这里想要呈现一个适合初学者的教程,希望对大家有用。

10010
来自专栏思考的代码世界

Python编程从入门到实践之常用函数|第13天

User:你好我是森林 Date:2018-03-25 Mark:《Python从入门到实践》 原文:https://www.jianshu.com/p/002...

38550
来自专栏前端知识分享

第172天:面向对象基本知识点

                     2 .构造函数内部会创建一个新的对象,即f的实例

9530
来自专栏游戏杂谈

LuaJit转义的问题

之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对...

18220
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享P...

10330

扫码关注云+社区

领取腾讯云代金券