我正在阅读这个问题:
When does a pointer to a linked list change the actual list?
此处代码:
typclass Node:
def __init__(self, val):
self.val = val
self.next = None
def addNode(self, val):
root = self
while root.next is not None:
root = root.next
root.next = Node(val)
def iterateLL(self):
root = self
print
while root is not None:
print(str(root.val) + " ", end="")
root = root.next
print()
if __name__ =="__main__":
L = Node(1)
L.addNode(2)
L.addNode(3)
L.addNode(4)
# iterate through list and print:
L.iterateLL()
# changing value of pointer does not affect L
P = L
P = P.next
L.iterateLL() # L is unchanged
# changing "next" value of pointer does affect L
P = L
P.next = P.next.next
L.iterateLL() # now we've skipped node 2
# changing data of pointer does affect L
P = L
P.val = 10
L.iterateLL()e here
这里我不明白为什么当我们修改P或P上的任何动作时“L.iterateLL”的值被改变。如果它是“P.iterateLL”,那么我可以完全理解,因为P从L读取所有数据;然而,现在迭代L实际上并没有改变任何东西,从我理解P=L是P从L读取的单向引用,并没有改变L,那么为什么当我们修改P时L的数据会改变?或者这里P=L也是L=P?
先谢谢你
1条答案
按热度按时间1zmg4dgp1#
当你赋值P=L时,它并没有创建一个该类的新对象,它只是赋值了那个对象的地址。你可以用
print(id(L), id(P))
来检查。你会发现变量L和P都引用了内存中的同一个对象。因此改变P和改变L是一样的。