python-关于函数间参数传递问题(注意理解,很容易混淆)

本文通过一个递归生成链表的例子,探讨Python中函数参数传递的问题。当函数内部创建新的对象时,原始参数引用并不会改变,导致预期结果不一致。理解这一现象有助于避免编程中的常见误区。
摘要由CSDN通过智能技术生成

先看段代码,关于递归生成链表的问题,先自己判断会输出什么,再看结果

class Node:
     def __init__(self):
         self.val = None
         self.next = None


def ccc(node,x,res):
    if res == x:
        return
    node = Node()
    node.val = res
    res = res + 1
    ccc(node.next,x,res)

x = Node()
ccc(x,6,0)
print x.val

结果输出为None,为什么呢?明明已经调用了ccc函数,也把头结点穿进去了,怎么会这样呢?原因在于首先执行了x = Node(),我们假设给x分配了001的内存地址,这个内存里面放的就是Node类的一个实例,接着我们调用了ccc函数,将x传递给了ccc函数的参量node,现在node也指向了001的内存地址,到这似乎没什么问题,但接下来node = Node()这一步就是问题关键所在,现在node不在指向001的内存地址,而是被新分配了一个内存地址002,里面也存放的是Node类的一个实例,而我们头结点所指向的内存并不被ccc函数执行,所以001内存里的数据并没有因为ccc的调用而更新。

好了既然知道了问题所在࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值