Первый мой вопрос на форуме. так что прошу не серчать если что не так

Итак на leetcode решал задачки про однонаправленные списки.
существует класс
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None
С ним различные манипуляции в задачке))
Задачку эту я решил, но наткнулся на одну необъяснимую штуку, надеюсь просветите.
global b1 b1=ListNode(666) class Solution: def reverseList(self, head: ListNode) -> ListNode: def util(head,h1): b1.val=head.val # присваиваю "глобальному" обьекту в поле val, функция возвращает 1 util(head,head) return b1
но если
global b1 b1=ListNode(666) class Solution: def reverseList(self, head: ListNode) -> ListNode: def util(head,h1): b1=head # присваиваю как обьект к обьекту- возвращает 666, то есть присваивания не происходит util(head,head) return b1
Почему не происходит присваиания во втором случае? на мой взгляд выражение допустимо
PxSx задачку решил изменив присваивание b1 на b1.next - аналогично первому примеру, но только с другим полем объекта.