Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Как при присваивании изменяется python объект?

  1. Как при присваивании изменяется python объект?

    Ребят, у меня вопрос насчет того, как при присваивании изменяется python объект. Вот есть у меня переменная x и я присваиваю ей значение другого объекта, например y. Так вот, я не могу понять, меняется ли при этом сам объект y или создается новая копия. Было бы круто, если бы кто-то объяснил это поподробнее, с примерами кода желательно. Я новичок в Python и пока что не совсем понимаю разницу между изменяющимися и неизменяющимися объектами. Спасибо!



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет! На самом деле при присваивании переменных в Python объект y не изменяется, создается ссылка на него. То есть, если x и y - это mutable (изменяемые) объекты, например список, то изменения через одну переменную будут видны и через другую. Вот пример для наглядности:
    Программный код:
    = [123]
    x
    y
    .append(4)
    print(
    x)  # Вывод: [1, 2, 3, 4] 
    Как видишь, при изменении y изменился и x. А вот с неизменяемыми (immutable) объектами, типа строк или кортежей, такое поведение будет другим.

  4. Цитата Сообщение от SpiritBinder
    Привет! На самом деле при присваивании переменных в Python объект y не изменяется, создается ссылка на него. То есть, если x и y - это mutable (изменяемые) объекты, например список, то изменения через одну переменную будут видны и через другую. Вот пример для наглядности:
    Программный код:
    = [123]
    x
    y
    .append(4)
    print(
    x)  # Вывод: [1, 2, 3, 4] 
    Как видишь, при изменении y изменился и x. А вот с неизменяемыми (immutable) объектами, типа строк или кортежей, такое поведение будет другим.
    О, большой пример - это то, что надо! Да, так прямо стало ясно. С mutable объектами всегда такая фигня, что менять приходится аккуратно.

  5. Все верно, как написали выше. Присваивание в Python не копирует объект, а лишь создает на него новую ссылку. Если копию все же требуется сделать, используй метод copy или deepcopy из модуля copy.
    Программный код:
    import copy
    = [123]
    copy.deepcopy(x)
    y.append(4)
    print(
    x)  # Вывод: [1, 2, 3] 

  6. Цитата Сообщение от WitchDoctor1010
    Все верно, как написали выше. Присваивание в Python не копирует объект, а лишь создает на него новую ссылку. Если копию все же требуется сделать, используй метод copy или deepcopy из модуля copy.
    Программный код:
    import copy
    = [123]
    copy.deepcopy(x)
    y.append(4)
    print(
    x)  # Вывод: [1, 2, 3] 
    Well, deepcopy - это чума, братан. Реально спасающий метод, когда не хочешь путаницы с изменениями.

  7. Привет, если что-то неясно, то возьми простую строку и попробуй поиграть с ней:
    Программный код:
    "hello"
    x
    += " world"
    print(x)  # Вывод: hello
    print(y)  # Вывод: hello world 
    С неизменяемыми объектами новые значения создаются каждый раз.

  8. Цитата Сообщение от Siberyachok
    Привет, если что-то неясно, то возьми простую строку и попробуй поиграть с ней:
    Программный код:
    "hello"
    x
    += " world"
    print(x)  # Вывод: hello
    print(y)  # Вывод: hello world 
    С неизменяемыми объектами новые значения создаются каждый раз.
    Ясно-понятно! С immutables та ещё засада, но зато надежно, не изменятся никуда.

  9. Если хочется прям полную картину представлять, читай про garbage collection в Python. Это даст понимание, куда все эти ссылки уходят со временем и как управлять памятью.

  10. Цитата Сообщение от Мальвинка
    Если хочется прям полную картину представлять, читай про garbage collection в Python. Это даст понимание, куда все эти ссылки уходят со временем и как управлять памятью.
    Точно, знаешь, редко кто сразу про сборку мусора задумывается, но тема полезная, особенно для масштабных проектов.

Страница 1 из 2 12 ПоследняяПоследняя