如何将参数传递给Python中的函数?

时间:2016-06-27 22:14:44

标签: python

基本上,我的问题是,如果我将参数传递给Python中的函数,为其分配一些其他值,然后更改该值,这两个值是否会更改或只是一个?函数参数究竟是如何在python中传递的?

换句话说,我说有一些A类定义如下:

class A(object):

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

class B(object):

    def increment():
       # Do something

    ...

其中B类是某个类(确切地说它并不重要),b和_b都是B类。如果我做了以下内容:

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

是instanceOfB会改变,还是会保持不变?

我希望这个问题很明确。我在解释我想问的问题上遇到了很多麻烦,所以请随时要求澄清!

1 个答案:

答案 0 :(得分:2)

你在这里纠结了几件事。您的示例中的函数参数永远不会被修改。只有名称和参数所引用的对象。

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

instanceOfB = B()

如果您将名称分配给名称,则会有效复制名称后面的引用。您有两个名称独立引用同一个对象。如果您将一个名称重新分配给其他名称,则另一个名称不会更改。

如果调用函数,则按值传递名称。也就是说,在函数内部,您有一个引用同一对象的新名称(可以称为相同的名称)。

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

现在,到目前为止,您只分配了名称。每个作业都会创建参考的副本,这意味着每个名称都可以独立运行。但是,即使它有多个名称,仍然只有一个instanceOfB。 instanceOfA._binstanceOfB都指向同一个对象。

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