В Python все аргументы передаются по ссылке. Это связано с тем, что каждая переменная в Python содержит ссылку на объект, а не хранит само значение напрямую.
Практическое поведение зависит от изменяемости объекта:
Объекты вроде списков, словарей и пользовательских классов можно менять на месте:
def modify_list(items):
items.append(4)
my_list = [1, 2, 3]
modify_list(my_list)
# my_list теперь [1, 2, 3, 4] - изменения сохраняются
Изменения, сделанные с изменяемыми объектами внутри метода, видны снаружи метода.
Объекты вроде строк, целых чисел и кортежей нельзя менять на месте:
def modify_string(text):
text = text + " modified"
my_string = "hello"
modify_string(my_string)
# my_string остаётся "hello" - изменения не сохраняются
Когда ты пытаешься изменить неизменяемый объект, Python создаёт новый объект вместо того, чтобы модифицировать исходный. Внешняя переменная по-прежнему ссылается на исходный объект, поэтому изменения не видны снаружи метода.
Python передаёт ссылки, а не значения. Изменяемость объекта определяет, будут ли видны изменения снаружи метода. Такой подход иногда называют «передачей по ссылке на объект».
Когда ты передаёшь изменяемый объект, например список, в метод и модифицируешь его через append(), изменения видны снаружи метода, потому что метод получает ссылку на исходный объект.
Новый — ещё не проверен сообществом
Вы