为什么这个Python函数不是通过引用传递的? 我创建并将A.func设置为funcA(打印“否”) 我创建B并设置B.func=A.func=funcA(打印“否”) 我将A.func更改为funcB(打印“是”) 我执行B.func,它执行funcA(打印“否”)

为什么这个Python函数不是通过引用传递的? 我创建并将A.func设置为funcA(打印“否”) 我创建B并设置B.func=A.func=funcA(打印“否”) 我将A.func更改为funcB(打印“是”) 我执行B.func,它执行funcA(打印“否”),python,function,class,reference,pass-by-reference,Python,Function,Class,Reference,Pass By Reference,如果在第2步中函数是通过引用传递的,而在第3步中函数目标被更改,为什么B.func不更改为新目标?Python不使用“通过引用传递”。@Wombatz-Python,请参阅。它甚至可以通过引用传递到函数,但赋值=不必做相同的事情-最后,您会得到与预期不同的结果。Python是通过值传递的,但每个变量(实际上,每个表达式)的值都是引用。这种看似迂腐的区别是启蒙的关键。 def funcA(): print("No") def funcB(): print(&q

如果在第2步中函数是通过引用传递的,而在第3步中函数目标被更改,为什么B.func不更改为新目标?

Python不使用“通过引用传递”。@Wombatz-Python,请参阅。它甚至可以
通过引用传递到函数,但赋值
=
不必做相同的事情-最后,您会得到与预期不同的结果。Python是通过值传递的,但每个变量(实际上,每个表达式)的值都是引用。这种看似迂腐的区别是启蒙的关键。
def funcA():
    print("No")

def funcB():
    print("Yes")

class A:
    def __init__(self, func):
        self.func = func
    
    def getB(self):
        b = B(self.func)
        return b

    def setfunc(self, func):
        self.func = func


class B:
    def __init__(self, func):
        self.func = func
    
    def execfunc(self):
        self.func()


a = A(funcA)
b = a.getB()
a.setfunc(funcB)
b.execfunc()