单链表的基本要素有 2 个,数据项和连接项。这两项在 Python 中可以通过对象及其属性来实现。
1 class Node: 2 def __init__ (self, data): 3 self.data = data 4 self.next = None 5 6 def add (self, data): 7 p = self 8 9 while p.next != None: 10 p = p.next 11 12 p.next = Node (data) 13 14 def subtract (self): 15 p = self 16 17 if p.next == None: 18 print (r'Oh, I can't') 19 return 20 21 while p.next.next != None: 22 p = p.next 23 24 p.next = None 25 26 def show (self): 27 p = self 28 29 while p != None: 30 print (p.data, end=' ') 31 p = p.next 32
>>> t = Node (1) >>> t.show () 1 >>> t.add (2) >>> t.show () 1 2 >>> t.subtract () >>> t.show () 1
不过刚开始 add 是这样实现的:
1 def add (self, data): 2 p = self.next 3 4 while p != None: 5 p = p.next 6 7 p = Node (data)
最后测验无效,思考ing
p 和 self 是什么关系?引用还是复制?
查询了一下,Python 中一切变量皆是引用。(还有一句知名度较高:Python 中一切数据皆是对象)
如果修改引用内容,分2种情况考虑:
如果引用对象为不可变对象:
创建新对象
如果引用对象为可变对象:
修改原对象
而上面 add 失效,是因为 p = Node (data) 直接解了引用,而不是修改了原对象
--data: 2015-05-25