sandzhaj.space

Меню
  • главная
  • cтатьи
  • книги
  • про автора
Меню

Заметка о изменяемых объектах в Python

Опубликовано в 09.11.202309.11.2023 от sandzhaj

Говоря о функциях, правильно рассуждать о том чтобы она получала какие-то данные и возвращала какие-то данные. Однако, в некоторых случаях мы можем изменить что-либо внутри функции и это будет иметь последствия для кода снаружи, даже не присваивая ее результат.

Рассмотрим следующий пример, как думаете, какой будет результат?

class Test:
    def __init__(self):
        self.number = 5

number = 5
class_number = Test()

def modify(number: int, class_number Test, number_from_class: int):
    number = 1
    class_number.number = 2
    number_from_class = 3

modify(number, class_number, class_number.number)

print(number, class_number.number)

Правильный ответ — «5 2». Изменив атрибут у объекта класса внутри функции, которой мы передали этот объект, он поменяется и снаружи, так как объекты обычных классов являются изменяемыми объектами. Остальные переменные не поменяли своего значения снаружи, так как число и многие другие типы являются неизменяемыми. Когда вы выполняете присваивание number = 1 внутри функции modify, это создает новую переменную number в локальной области видимости функции, которая скрывает глобальную переменную number. Это изменение видимо только внутри функции.

Возможно это сразу очевидно многим, но я даже не задумывался о таком, пока сам не споткнулся.

  • python
  • ооп
  • Поиск

    Подпишись

    Теги

    bash git helm python zsh автоматизация нейросеть ооп терминал трекинг

    ©2025 sandzhaj.space