Python. a = b = Class() — что это?

Весь код:
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def lst2link(lst):
    cur = dummy = ListNode(0)
    print(cur)
    print(dummy)
    for e in lst:
        cur.next = ListNode(e)
        cur = cur.next
    return dummy.next

Этот код преобразуют массив в линкед лист.
Вот фрагмент, который меня смущает
cur = dummy = ListNode(0)
Что он делает?
Почему он отличается от такого варианта:
cur = ListNode()
dummy = ListNode()
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
В первом случае две ссылки cur и dummy указывают на один и тот же объект ListNode(0). В случае если ListNode(0) это мутабельный объект то изменения в cur приведут к изменению в dummy и наоборот. То есть создается один объект и два указателя на него.

Во втором случает создается два объекта с идентичным значением. И к каждому по указателю. Я на пример списков сейчас продемонструю.

l1 = l2 = [1,2,3]
print("Это список l1:", l1)
print("Это список l2:", l2)
l1.append(4)
print("В список l1 добавили 4:", l1)
print("Это список l2 и он изменился тоже:", l2)


а теперь второй кейс
l1 = [1,2,3]
l2 = [1,2,3]
print("Это список l1:", l1)
print("Это список l2:", l2)
l1.append(4)
print("В список l1 добавили 4:", l1)
print("Это список l2 и он не изменился:", l2)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
04 мая 2024, в 06:10
4000 руб./за проект
04 мая 2024, в 05:49
10000 руб./за проект
04 мая 2024, в 03:57
10000 руб./за проект