基本上,我的问题是,如果我在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会改变,还是保持不变?你知道吗
我希望这个问题很清楚。我很难解释我想问什么,所以请随时要求澄清!你知道吗
你在这儿弄坏了好几样东西。示例中的函数参数从不修改。只有名称和参数引用的对象才是。你知道吗
Python使用名称,这与指针和引用类似—名称引用对象,但不是对象本身。在这里,您将B(对象)的一个实例绑定到instanceOfB(名称):
如果将name赋值给name,则会有效地复制name后面的引用。有两个名称独立地引用同一对象。如果将一个名称重新指定给其他名称,则另一个名称不会更改。你知道吗
如果调用函数,则通过值传递名称。也就是说,在函数内部有一个引用同一对象的新名称(可能被称为相同名称)。你知道吗
现在,到目前为止你只分配了名字。每个赋值都会创建一个引用的副本,这意味着每个名称都是独立工作的。但是,尽管instanceOfB有多个名称,但仍然只有一个instanceOfB。
instanceOfA._b
和instanceOfB
都指向同一个对象。你知道吗现在,如果您修改对象,您将在每个名称上看到此更改,因为它们都只引用同一个对象。你知道吗
相关问题 更多 >
编程相关推荐