如果 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!