Шаг 13.
Основы языка Python.
Переменные. Присваивание значения переменным

    На этом шаге мы рассмотрим особенности выполнения присваивания.

    В языке Python используется динамическая типизация. Это означает, что при присваивании переменной значения интерпретатор автоматически относит переменную к одному из типов данных. Значение переменной присваивается с помощью оператора = таким образом:

>>> x = 7 # Тип int
>>> y = 7.8 # Тип float
>>> s1 = "Строка" # Переменной s1 присвоено значение Строка
>>> s2 = 'Строка' # Переменной s2 тоже присвоено значение Строка
>>> b = True      # Переменной b присвоено логическое значение True

    В одной строке можно присвоить значение сразу нескольким переменным:

>>> x = y = 10
>>> x, y
(10, 10)

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

>>> x = y = [1, 2] # Якобы создали два объекта
>>> x, y
([1, 2], [1, 2])

    В этом примере мы создали список из двух элементов и присвоили значение переменным х и у. Теперь попробуем изменить значение в переменной у:

>>> y[1] = 100 # Изменяем второй элемент
>>> x, y
([1, 100], [1, 100])

    Как видно из примера, изменение значения в переменной у привело также к изменению значения в переменной х. Таким образом, обе переменные ссылаются на один и тот же объект, а не на два разных объекта. Чтобы получить два объекта, необходимо производить раздельное присваивание:

>>> x = [1, 2]
>>> y = [1, 2]
>>> y[1] = 100 # Изменяем второй элемент
>>> x, y
([1, 2], [1, 100])

    Проверить, ссылаются ли две переменные на один и тот же объект, позволяет оператор is. Если переменные ссылаются на один и тот же объект, то оператор is возвращает значение True:

>>> x = y = [1, 2] # Один объект
>>> x is y
True
>>> x = [1, 2] # Разные объекты
>>> y = [1, 2] # Разные объекты
>>> x is y
False

    Следует заметить, что в целях повышения эффективности кода интерпретатор производит кэширование малых целых чисел и небольших строк. Это означает, что если ста переменным присвоено число 2, то в этих переменных будет сохранена ссылка на один и тот же объект. Пример:

>>> x = 2; y = 2; z = 2
>>> x is y, y is z
(True, True)

    Посмотреть количество ссылок на объект позволяет метод getrefcount () из модуля sys:

>>> import sys # Подключаем модуль sys
>>> sys.getrefcount(2)
472

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

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг