【发布时间】:2020-02-06 15:39:45
【问题描述】:
我正在尝试理解以下代码,我需要在其中确定将要打印的输出。但是,我被卡住了一半。代码(对不起,我似乎无法正确设置间距):
# Let the classes A and B be
class A:
def __init__ (self):
self.i = 3
def doubled (self):
self.i *= 2
class B:
def __init__ (self, an_a_object):
self.a = an_a_object
def put (self, an_a_object):
self.a = an_a_object
# Further we have a program with the following statements/declarationsa
a1 = A()
b1 = B(a1)
def show (an_a_object, a_b_object):
print '%d %d' % (an_a_object.i, a_b_object.a.i)
show(a1, b1)
b1.a.doubled()
show(a1, b1)
a2 = A()
show(a2, b1)
b1.put(a2)
show(a2, b1)
b2 = B(a1)
show(a1, b1)
b2.a.doubled()
show(a2, b2)
b1.a.doubled()
b2.put(b1.a)
show(a2, b2)
这个程序会打印什么?
所需的输出: 3 3
6 6
3 6
3 3
6 3
3 12
6 6
我直到 6 3 才明白,但在那之后我不明白。我认为 b2.a.doubled() 会使 b2 加倍(我认为在加倍之前是 3,因为 b2 = B(a1)),但显然 b2 在加倍时是 12?而且我认为a2也会加倍,但a2仍然是3?那为什么在第一个 b1.a.doubled() 之后,a1 和 b1 都加倍(因为它从 3 3 变为 6 6)?
【问题讨论】:
-
请修正你的缩进。
-
另外,请阅读nedbatchelder.com/text/names.html。
self.a = an_a_object不会复制A对象。a和b.a都引用同一个 mutable 对象。通过一个引用所做的更改可以通过另一个看到。
标签: python python-2.7 function class reference