Найти в Дзене
Властелин машин

Изменяемость объектов в Python: когда несет опасность и как от этого защититься

В мире нет ничего более постоянного, чем непостоянство (С. Батлер). Объекты в Python делятся на неизменяемые (целые, дробные, строчные, кортежи) и изменяемые (например, списки, словари, множества), в зависимости от чего их поведение при модификации может иметь неожиданный характер.

При изменении значения неизменяемого типа, создастся другой объект. Это можно установить путем вывода его идентификатора со встроенной функцией id:

В случае модификации списка, его идентификатор не поменяется, так как тип - изменяемый:

-2

Это касается и Pandas датафрейма:

-3

Ввиду этого распространенной ошибкой является копирование датафрейма через присваивание:

-4

id объекта не меняется, и модификация одного сказывается на другом:

-5

Для получения копии датафрейма правильно использовать метод copy:

-6

Также будьте осторожны при модификации изменяемого объекта, передаваемого через аргумент в функцию:

-7

f модифицировала df2, переданный в качестве аргумента. Также поменялся df1, так как он ссылается на тот же объект, а df3 ожидаемо остался без изменений.

-8