Используйте 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.