Pythoner
Фотография
✈️Новички часто удивляются, когда данные "меняются сами по себе". Причина — путаница между изменяемыми и неизменяемыми типами.
➡️Неизменяемые типы (immutable):
int, float, str, tuple, bool, frozenset
a = "hi"
b = a
a = "bye"
print(b) # hi
🔫b осталась "hi", потому что строки неизменяемы. a = "bye" создала новый объект.
➡️Изменяемые типы (mutable):
list, dict, set, bytearray, user-defined объекты
a = [1, 2, 3]
b = a
a.append(4)
print(b) # [1, 2, 3, 4]
🔫b тоже изменилась, потому что список — изменяемый. b = a — это ссылка на тот же объект.
➡️Что это значит на практике?
- Можно "безопасно" копировать неизменяемые значения
- С изменяемыми — нужно использовать .copy() или copy.deepcopy(), если не хочешь менять оригинал
➡️Пример с функцией:
def add_item(lst):
lst.append(99)
my_list = [1, 2]
add_item(my_list)
print(my_list) # [1, 2, 99]
🔫Список изменился! Потому что передали ссылку, а не копию.
💡Заключение
Неизменяемые типы создают копии при присваивании, изменяемые — передают ссылку.Всегда думай, что именно ты копируешь: значение или объект.
🐍Pythoner
14 · 1.6K ·