考虑以下代码test_class.py:
class TestClass:
def __init__(self,Na,Nb):
self.a = list(range(Na))
self.b = list(range(Nb))
def swapA(self):
a = self.a
b = self.b
a,b = b,a
assert a is self.b
assert b is self.a
def swapB(self):
a = self.a
b = self.b
a,b = b,a
assert a is self.b
assert b is self.a
#why is this necessary?
self.a = a
self.b = b
if __name__ == '__main__':
tc = TestClass(2,3)
print('len(tc.a) = %d, len(tc.b) = %d' % (len(tc.a),len(tc.b)))
tc.swapA()
print('after swapA(): len(tc.a) = %d, len(tc.b) = %d' % (len(tc.a),len(tc.b)))
tc.swapB()
print('after swapB(): len(tc.a) = %d, len(tc.b) = %d' % (len(tc.a),len(tc.b)))
通过运行此(python test_class.py
)得到的输出是:
len(tc.a) = 2, len(tc.b) = 3
after swapA(): len(tc.a) = 2, len(tc.b) = 3
after swapB(): len(tc.a) = 3, len(tc.b) = 2
我不明白为什么swapA()
并没有像我期望的那样更新self.a
和self.b
成员。尽管断言通过了。我希望swapA()
和swapB()
的行为是相同的,但事实显然并非如此。
这里的任何解释将不胜感激。