参见这个 Leetcode MergeTwoSupportedList 解决方案:
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
prehead = ListNode(-1)
curr = prehead
while list1 and list2:
if (list1.val <= list2.val):
curr.next = list1
list1 = list1.next
else:
curr.next = list2
list2 = list2.next
curr = curr.next
curr.next = list1 if list1 != None else list2
return prehead.next
当我们赋值
curr.next = list1
,然后再赋值 list1 = list1.next
时,为什么 curr.next
不指向 list1.next
?根据我的理解,这些对象及其属性应该是可变的,这意味着变量赋值指向内存中的某个位置。
为了确保我正确理解变量赋值:
a = []
b = [1]
a = b
b.append(2)
print(a)
print(b)
print(id(a))
print(id(b))
在这个例子中,我们可以看到,即使我们改变 b,a == b 也是如此。上面的问题有什么不同?
当我们赋值
,然后再赋值curr.next = list1
时,为什么list1 = list1.next
不指向curr.next
?list1.next
实际上,每个 Python 变量都包含一个引用。您已完成以下操作:
curr.next
,其中包含由list1
引用的当前
list1
的引用替换为 1 至 list1.next
按照这个顺序。因此,更改
list1
的值不会对 curr.next
产生任何影响。
现在,如果在“2”中你操纵了
list1
指向的内容,那么那就是一个不同的故事:你将能够通过curr.next
看到变化。