Вопрос проверяет понимание механизма ссылок в Python, который лежит в основе работы с объектами и передачи аргументов в функции.
В Python все данные представлены объектами, а переменные — это просто имена (labels), которые ссылаются на эти объекты. Механизм ссылок означает, что при присваивании a = b переменная a начинает указывать на тот же объект, что и b, а не создаётся его копия. Это фундаментально для понимания поведения программы, особенно при работе с изменяемыми типами данных.
Объекты в Python делятся на изменяемые (mutable) и неизменяемые (immutable). К неизменяемым относятся числа, строки, кортежи. При попытке изменить такой объект создаётся новый. К изменяемым относятся списки, словари, множества — их содержимое можно менять на месте.
Рассмотрим простой пример с неизменяемым объектом:
a = 10
b = a # b ссылается на тот же объект 10
print(id(a) == id(b)) # True — одинаковые идентификаторы
b = 20 # b теперь ссылается на новый объект 20
a = 30 # a ссылается на новый объект 30
print(a, b) # 30 20 — изменения независимыТеперь пример с изменяемым объектом — списком:
list1 = [1, 2, 3]
list2 = list1 # list2 ссылается на тот же список
print(id(list1) == id(list2)) # True
list2.append(4) # изменяем объект через list2
print(list1) # [1, 2, 3, 4] — изменение видно через list1
# Чтобы создать независимую копию, нужно использовать list1.copy() или list(list1)В Python аргументы передаются по присваиванию (call by assignment). Это значит, что в функцию передаётся ссылка на объект. Если объект изменяемый, функция может его модифицировать, что повлияет на оригинальный объект вне функции.
def modify_list(lst):
lst.append("modified") # изменяет переданный список
def reassign_list(lst):
lst = ["new"] # создаёт новую локальную ссылку, не влияет на внешний объект
my_list = [1, 2]
modify_list(my_list)
print(my_list) # [1, 2, "modified"] — список изменён
reassign_list(my_list)
print(my_list) # [1, 2, "modified"] — не изменилсяПонимание ссылок необходимо для:
Вывод: Механизм ссылок в Python — это основа модели данных языка. Его нужно хорошо понимать, чтобы правильно работать с изменяемыми объектами, избегать ошибок с неожиданными изменениями данных и писать эффективный код, который не создаёт лишних копий объектов.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
Python
Ключевые слова
Подпишись на Python Developer в телеграм