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()
目录
相关文章
|
2天前
|
算法 Java C++
C++和Python在内存管理上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存管理上的主要区别是什么?
6 1
|
8天前
|
存储 Python
Python中list, tuple, dict,set的区别和使用场景
Python中list, tuple, dict,set的区别和使用场景
|
9天前
|
索引 Python
Python中append,insert和extend的区别
Python中append,insert和extend的区别
|
7天前
|
Shell Python
Python教程:return和yield的区别
Python教程:return和yield的区别
7 0
Python教程:return和yield的区别
|
11天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之建了一个python 的 UDF脚本,生成函数引用总是说类不存在,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
18天前
|
存储 安全 Java
在Python中,引用和赋值机制是理解变量和数据对象之间关系的关键
【6月更文挑战第16天】Python变量是对象引用,不存储数据,指向内存中的对象。赋值`=`创建引用,不复制对象。`b = a`时,a和b指向同一对象。引用计数管理对象生命周期,垃圾回收在引用数为0时回收对象。理解这些机制对优化内存使用关键。
35 7
|
20天前
|
Java Python
Python2.x 与 3​​.x 版本区别
Python2.x 与 3​​.x 版本区别
|
1天前
|
缓存 测试技术 Python
python的装饰器是什么?有什么作用?迭代器和生成器的区别?
python的装饰器是什么?有什么作用?迭代器和生成器的区别?
|
2天前
|
算法 Java C++
C++和Python在内存分配策略上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存分配策略上的主要区别是什么?
4 0
|
2天前
|
机器学习/深度学习 Java 程序员
Python和C++的区别?
【7月更文挑战第2天】Python和C++的区别?
5 0

相关实验场景

更多