В этой статье мы обсудим различия между изменяемыми и неизменяемыми типами данных и найдем способ изменять значения внутри кортежей.
В Python есть 4 встроенных типа данных для хранения нескольких значений в одной переменной. Это списки, словари, множества и кортежи. Эти структуры данных можно разделить на две категории. Они могут быть либо изменяемыми, либо неизменяемыми.
Мутабельные и неизменяемые типы данных
Основное различие заключается в том, что при использовании изменяемых типов данных, таких как списки или словари, вы можете изменить значение внутри них после присвоения.
Например:
list_a = ["first", "second", "third"] # this is a list
print(list_a) # output: ["first", "second", "third"]
list_a[0] = "zero"
print(list_a) # output: ["zero", "second", "third"]
Однако в случае с кортежем вы не сможете этого сделать, поскольку кортежи неизменяемы, то есть элементы внутри них неизменяемы. Если мы попытаемся изменить значение в нашем кортеже следующим образом:
tuple_a = ("element1", "element2", "element3")
print(tuple_a) # output: ('element1', 'element2', 'element3')
tuple_a[0] = "element0"
мы получим ошибку типа:
Но иногда нам нужно изменить значение кортежа…
Что же мы можем сделать, чтобы изменить это значение?
Самое простое решение — использовать встроенные методы преобразования.
Итак, у нас осталось 3 типа данных. Какой из них мы должны использовать?
Словари _ требуют пар ключ-значение, поэтому в данном случае использование словаря не будет хорошей идеей.
У нас также есть множества. Несмотря на то, что множества мутабельны, то есть значения могут быть изменены после присвоения, они не допускают дубликатов. Поэтому преобразование кортежа, содержащего дубликаты значений (например, две одинаковые строки), в набор приведет к потере данных, чего мы хотели бы избежать.
Поэтому наш последний кандидат — список. Он изменяем, допускает дубликаты. Кажется, это идеальное решение!
Как мы можем изменить данные?
Сначала нам нужно преобразовать наш кортеж в список с помощью встроенного метода.
tuple_a = ("element1", "element2", "element3")
tuple_a = list(tuple_a)
print(tuple_a) # output: ["element1", "element2", "element3"]
print(type(tuple_a)) # output: <class 'list'>
После преобразования мы получим список. Теперь нам нужно изменить значение на что-то другое.
tuple_a = ("element1", "element2", "element3")
tuple_a = list(tuple_a)
print(tuple_a) # output: ["element1", "element2", "element3"]
print(type(tuple_a)) # output: <class 'list'>
tuple_a[0] = "element0"
print(tuple_a) # output: ["element0", "element2", "element3"]
Наконец, мы должны преобразовать наш список обратно в кортеж.
tuple_a = ("element1", "element2", "element3")
tuple_a = list(tuple_a)
print(tuple_a) # output: ["element1", "element2", "element3"]
print(type(tuple_a)) # output: <class 'list'>
tuple_a[0] = "element0"
print(tuple_a) # output: ["element0", "element2", "element3"]
tuple_a = tuple(tuple_a)
print(tuple_a) # output: ("element0", "element2", "element3")
print(type(tuple_a)) # output: <class 'tuple'>
Вот и все! Мы успешно изменили значение внутри нашего кортежа! 🥳