Тестирование сохранения ссылки при обращении списка задом наперед

Используйте assert result is elements для идентичности и отдельное сравнение содержимого для проверки разворота. Равенство списков само по себе не доказывает сохранение объекта.

Короткий ответ

Что ответить на собеседовании

Используйте assert result is elements для идентичности и отдельное сравнение содержимого для проверки разворота. Равенство списков само по себе не доказывает сохранение объекта.

Подробный разбор

Ответ с пояснениями

Условие

Сформулируйте тест, который передаёт список в функцию reverse_list(elements: list) -> list и проверяет, что возвращаемый объект является тем же самым, а не новым экземпляром.


def reverse_list(elements: list) -> list:
    elements.reverse()
    return elements

lst = [1, 2, 3]
result = reverse_list(lst)
assert result is lst

Ответ

Используйте assert result is elements для идентичности и отдельное сравнение содержимого для проверки разворота. Равенство списков само по себе не доказывает сохранение объекта.

import pytest

@pytest.mark.parametrize('initial', [[], [1], [1, 2, 3], [2, 2, 1]])
def test_reverse_preserves_identity(initial):
    elements = initial.copy()
    expected = elements[::-1]
    result = reverse_list(elements)
    assert result is elements
    assert elements == expected

Обе проверки нужны: функция, ничего не делающая со списком, прошла бы только проверку идентичности. А функция, возвращающая elements[::-1], прошла бы проверку содержимого, но создала бы новый объект. Не проверяйте результат elements.reverse() напрямую: сам метод возвращает None, поэтому обёртка должна отдельно вернуть elements.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее