在Python中参数是如何传递到函数中的?

2024-05-14 15:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我的问题是,如果我在Python中传递一个参数给一个函数,给它赋值,然后改变那个值,两个值都会改变还是只有一个?函数参数在python中到底是如何传递的?你知道吗

换句话说,假设我有一个A级定义如下:

class A(object):

    def __init__(self, b):
       self._b = b

class B(object):

    def increment():
       # Do something

    ...

其中,B类是某个类(确切地说,它是什么并不重要),B和\U B都属于B类。如果我做了以下操作:

instanceOfB = B()
instanceOfA = A(instanceOfB)
instanceOfA._b.increment()

instanceOfB会改变,还是保持不变?你知道吗

我希望这个问题很清楚。我很难解释我想问什么,所以请随时要求澄清!你知道吗


Tags: 函数self参数定义objectinitdef函数参数
1条回答
网友
1楼 · 发布于 2024-05-14 15:15:26

你在这儿弄坏了好几样东西。示例中的函数参数从不修改。只有名称和参数引用的对象才是。你知道吗

Python使用名称,这与指针和引用类似—名称引用对象,但不是对象本身。在这里,您将B(对象)的一个实例绑定到instanceOfB(名称):

instanceOfB = B()

如果将name赋值给name,则会有效地复制name后面的引用。有两个名称独立地引用同一对象。如果将一个名称重新指定给其他名称,则另一个名称不会更改。你知道吗

如果调用函数,则通过值传递名称。也就是说,在函数内部有一个引用同一对象的新名称(可能被称为相同名称)。你知道吗

instanceOfA = A(instanceOfB)
# -> A.__init__(self=instanceOfA, b=instanceOfB)
# -> instanceOfA._b = instanceOfB

现在,到目前为止你只分配了名字。每个赋值都会创建一个引用的副本,这意味着每个名称都是独立工作的。但是,尽管instanceOfB有多个名称,但仍然只有一个instanceOfB。instanceOfA._binstanceOfB都指向同一个对象。你知道吗

现在,如果您修改对象,您将在每个名称上看到此更改,因为它们都只引用同一个对象。你知道吗

相关问题 更多 >

    热门问题