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

简介: 对于不可变类型传递值(不会影响原数据)不可变类型对于可变类型传递引用(会影响原数据)不可变类型传递引用python3不可变类型Number(数字)String(字符串)Tuple (元组)pytho...

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

不可变类型

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

不可变类型传递引用

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()
目录
相关文章
|
1月前
|
存储 Python
Python中encode和encoding的区别
Python中encode和encoding的区别
30 0
|
1月前
|
Java Python
当引用计数器为0时,Python是如何确定哪些对象需要被回收的?
【2月更文挑战第19天】【2月更文挑战第56篇】当引用计数器为0时,Python是如何确定哪些对象需要被回收的?
|
1月前
|
存储 数据库 索引
Python新手常见问题一:列表、元组、集合、字典区别是什么?
本文针对Python编程新手常遇到的问题,详细阐述了列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)这四种数据结构的核心区别。列表是一种有序且可变的数据序列,允许元素重复;元组同样有序但不可变,其内容一旦创建就不能修改;集合是无序、不重复的元素集,强调唯一性,主要用于数学意义上的集合操作;而字典则是键值对的映射容器,其中键必须唯一,而值可以任意,它提供了一种通过键查找对应值的有效方式。通过对这些基本概念和特性的对比讲解,旨在帮助初学者更好地理解并运用这些数据类型来解决实际编程问题。
37 1
|
16天前
|
人工智能 机器人 测试技术
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
|
28天前
|
算法 开发者 Python
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
20 0
|
1月前
|
Python
请简述Python中的深拷贝和浅拷贝的区别?并举例说明。
【2月更文挑战第25天】【2月更文挑战第84篇】请简述Python中的深拷贝和浅拷贝的区别?并举例说明。
|
1月前
|
Python
请解释Python中的迭代器和生成器的区别?并分别举例说明。
【2月更文挑战第24天】【2月更文挑战第80篇】请解释Python中的迭代器和生成器的区别?并分别举例说明。
|
1月前
|
存储 Python
请简述Python中的列表、元组和字典的区别?
请简述Python中的列表、元组和字典的区别?
12 1
|
1月前
|
Python
请解释Python中的全局变量和局部变量有什么区别?
请解释Python中的全局变量和局部变量有什么区别?
15 2
|
1月前
|
Python
Python中__new__和__init__的区别与联系
Python中__new__和__init__的区别与联系
19 0

热门文章

最新文章