如果 class 个实例总是通过引用传递?
If class instances are always passed by reference?
我正在 Python3 中实现一个单链表。该程序将 "current_node" 分配给 "previous_node",然后将 "current_node" 更改为 "current_node.next"。我希望此更改也适用于 "previous_node",但事实并非如此。
class ListNode(object):
def __init__(self, val):
self.val = val
self.next = None
a = [7, 8, 11, 3]
fst_node, sec_node, thd_node, frt_node = ListNode(a[0]), ListNode(a[1]), ListNode(a[2]), ListNode(a[3])
fst_node.next = sec_node
sec_node.next = thd_node
thd_node.next = frt_node
current_node = sec_node
previous_node = current_node
print(previous_node, current_node)
current_node = current_node.next
print(previous_node, current_node)
current_node = sec_node
previous_node = current_node # current_node points to the same object as previous_node
print(previous_node, current_node)
current_node = current_node.next # changes where current_node points to
print(previous_node, current_node)
你注意到 previous_node
没有在这里重新分配吗?只有 current_node
是。这仍然是按引用传递,您只是更改了 current_node
引用的内容并单独留下 precious_node
。
引用(变量)和对象本身不是一回事。
您可以更改变量以指向另一个对象,但不会更改该对象。
objRef = someObject
anotherObjRef = objRef
objRef = anotherObject
# anotherObjRef will still point to someObject!
但是,如果您修改对象中的某些内容(通过引用),对象将被修改,因此您将在所有引用中看到新值:
objRef = someObject
anotherObjRef = objRef
objRef.someData = something
# anotherObjRef.someData is something!
我正在 Python3 中实现一个单链表。该程序将 "current_node" 分配给 "previous_node",然后将 "current_node" 更改为 "current_node.next"。我希望此更改也适用于 "previous_node",但事实并非如此。
class ListNode(object):
def __init__(self, val):
self.val = val
self.next = None
a = [7, 8, 11, 3]
fst_node, sec_node, thd_node, frt_node = ListNode(a[0]), ListNode(a[1]), ListNode(a[2]), ListNode(a[3])
fst_node.next = sec_node
sec_node.next = thd_node
thd_node.next = frt_node
current_node = sec_node
previous_node = current_node
print(previous_node, current_node)
current_node = current_node.next
print(previous_node, current_node)
current_node = sec_node
previous_node = current_node # current_node points to the same object as previous_node
print(previous_node, current_node)
current_node = current_node.next # changes where current_node points to
print(previous_node, current_node)
你注意到 previous_node
没有在这里重新分配吗?只有 current_node
是。这仍然是按引用传递,您只是更改了 current_node
引用的内容并单独留下 precious_node
。
引用(变量)和对象本身不是一回事。
您可以更改变量以指向另一个对象,但不会更改该对象。
objRef = someObject
anotherObjRef = objRef
objRef = anotherObject
# anotherObjRef will still point to someObject!
但是,如果您修改对象中的某些内容(通过引用),对象将被修改,因此您将在所有引用中看到新值:
objRef = someObject
anotherObjRef = objRef
objRef.someData = something
# anotherObjRef.someData is something!