>>> class Point: ... def __init__(self, x, y): ... self.x = x ... self.y = y ... def move_by(self, x, y): ... self.x += x ... self.y += y ... >>> p = Point(10, -4) >>> p <__main__.Point instance at 0x6fee0> >>> q = Point(10, -4) >>> q <__main__.Point instance at 0x6ff08> >>> p.x,p.y (10, -4) >>> q.x,q.y (10, -4) >>> p is q False >>> r = p >>> r.x,r.y (10, -4) >>> p is r True >>> p.move_by(20,20) >>> p.x,p.y (30, 16) >>> q.x,q.y (10, -4) >>> r.x,r.y (30, 16) >>> p=q >>> p.x,p.y (10, -4) >>> r.x,r.y (30, 16) >>> p2 = Point(p.x, p.y) >>> class CopyablePoint(Point): ... def copy(self): ... return CopyablePoint(self.x, self.y) ... >>> q = CopyablePoint(10, 4) >>> q2 = q.copy() >>> q.move_by(10,10) >>> q.x,q.y (20, 14) >>> q2 <__main__.CopyablePoint instance at 0x6ffa8> >>> q2.x,q2.y (10, 4) >>> q is q2 False