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月前
|
存储 Python
python--导入,模块的引用,包,__name__
python--导入,模块的引用,包,__name__
|
4月前
|
JSON 人工智能 机器人
Python|Python引用图灵机器人api
Python|Python引用图灵机器人api
70 0
|
5月前
|
Python
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
|
5月前
|
存储 程序员 API
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
|
5月前
|
存储 Python
【Python】栈堆内存之引用的秘密
【Python】栈堆内存之引用的秘密
|
5月前
|
Python
【Python】内存、引用、驻留
【Python】内存、引用、驻留
|
6月前
|
Python
Python 再谈变量作用域与变量引用
Python 再谈变量作用域与变量引用
49 0
|
8月前
|
存储 Python 容器
【Python】13_列表的引用
​ 二、拆包 1、组包与拆包 # 组包,将多个数据值,组成元组,给到一个变量 a = 1, 2, 3 print(a) # (1, 2, 3) def func(): return 1, 2 # 组包 # 拆包:将容器的数据分别给到多个变量,需要注意:数据的个数和变量的个数要保持一致 b, c, d = a # 拆包 把a的值分别给了b,c,d print(b,c,d) e,f = func() print(e,f) # 1 2 my_list = [10,20] a,b = my_list print(a, b) # 10 20 my_dict = {'n
82 0
|
8月前
|
Python
python使用import引用不了configparse模块等问题解决办法
python使用import引用不了configparse模块等问题解决办法
70 0
|
8月前
|
机器学习/深度学习 算法 C++
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
相关产品
云迁移中心
推荐文章
更多