Рубрики
Без рубрики

Что значит «неизменным» в Python?

Что означает неизменный в Python, где каждая сущность является объектом? В отличие от некоторых других языков программирования, где вам нужно четко указать тип

Автор оригинала: Pankaj Kumar.

Что означает неизменный в Python, где каждая сущность является объектом? В отличие от некоторых других языков программирования, где вам нужно четко указать тип данных, которые вы назначаете переменную, Python не требует этого. Вместо этого он автоматически назначает тип данных в зависимости от указанного вами значения.

Короче говоря, каждая переменная удерживает экземпляр объекта и дает уникальный идентификатор объекта, который создается при выполнении программы. Идентификатор объекта – это целое число, представляющее местоположение памяти, где сохраняется значение переменной.

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

#Initializing the variable
a = "this is not a random string"

#We call the id() function with the variable name as argument
print("The Object id of 'a' is: " + str(id(a)))

Выход:

Следующий вывод представляет

The Object id of 'a' is: 1695893310240

Что такое неизменность?

Чтобы правильно понять концепцию неподумности, нам нужно знать разницу между смежным объектом и неизменным объектом.

Что такое смежный объект?

Если состояние объекта может быть изменено после того, как оно создано, то он называется мультипным объектом.

Пример:

Ниже мы назначаем следующий список случайных значений в переменной « RandomValues ‘. Как только он создан, мы проверяем и отмечаем его идентификатор объекта. Затем нам нужно изменить список (который может быть достигнут путем добавления значений, удаляя их или просто замена одного из них с чем-то другим). Тогда мы снова принимаем к сведению идентификатор объекта. Если идентификатор объекта/местоположение памяти списка остается прежним, то мы можем сказать состояние Список Python был изменен.

# Our list of random values
randomValues = ["Bojack Horseman", 42, "Robert Langdon", 1.61803]
id1 = id(randomValues)

# Modifying/Changing the state of our list
randomValues[1] = "The answer to everything"
randomValues.append("I love Python")
id2 = id(randomValues)

# Compare the object id before and after modifying
if id1 == id2:
    print("The Object ID Remains the same.")
else:
    print("The Object ID changes.")

Выход:

The Object ID Remains the same.

Как мы можем видеть, что местоположение памяти или идентификатор списка оставался прежним, а значения изменены. Это означает, что Python выделил больше места памяти, чтобы рассмотреть дополнительные значения.

При этом можно сказать, что список – это «мультипликатор» или изменяемый объект.

Что такое неизменный объект?

Если состояние объекта не может быть изменено после его создания, то он называется неизменным объектом.

Пример 1:

В отличие от нашего предыдущего примера, где мы использовали списки для нашей операции, ниже, мы инициализируем кортеж со случайными значениями в нем. Затем мы принимаем к сведению его идентификатор объекта. Далее мы стараемся изменять кортеж и сравнивать ID объектов до и после.

# Our tuple of random values
randomValues = ("Bojack Horseman", 42, "Robert Langdon", 1.61803)
id1 = id(randomValues)

# Modifying/Changing the state of our tuple
randomValues[1] = "The answer to everything"

# Compare the object id before and after modifying
if id1 == id2:
    print("The Object ID Remains the same.")
else:
    print("The Object ID changes.")

Выход:

TypeError: 'tuple' object does not support item assignment

Здесь мы видим, что кортеж (потенциально неизменный тип) не поддерживает изменение его значений или присоединения элементов к ним. Итак, давайте продолжим ту же операцию с целым числом.

Пример2:

Теперь нам нужно назначить простое целочисленное значение для любой переменной и обратите внимание, что это идентификатор объекта. Как и наши предыдущие примеры, мы назначаем новое значение нашей целой вариабе и сравните идентификатор объекта.

# first we assign an integer value to the variable 
randomNumber = 42
id1 = id(randomNumber)

# Change the value of our integer variable
randomNumber = 134
id2 = id(randomNumber)

if id1 == id2:
    print("The Object ID remains the same.") 
else:
    print("The Object ID changed.")

Выход:

The Object ID changed.

Здесь мы можем четко замечать, что после нового назначения значения идентификатор объекта переменной «PandleNumber» также изменился.

Значение, это отдельный объект, чем раньше. Это не изменение состояния исходного объекта.

Примечание. Когда вы назначаете новое значение переменной с неизменяемым объектом – это создает новый объект и не перезаписывает текущие.

Какие объекты Python неизменяются?

Теперь, когда мы понимаем значение слова неизменный в Python Давайте посмотрим, какой тип объектов в Python неизменен:

  • Строки
  • Целые числа
  • Плавает
  • Кортежи
  • Диапазоны являются кортежи

Заключение

Одним из основных преимуществ неизменных объектов является то, что они намного быстрее к доступу, чем вомируемые аналоги. Надеюсь, что эта статья помогла вам понять концепцию неизменных объектов в Python.

Рекомендации

https://docs.python.org/3/reference/datamodel.html