Домой

Последняя активность

  

Ссылки в Python

PyDeKolt avatar PyDeKolt (0) [#] (27.05.2013 / 16:55)
Тут собрана всевозможная информация о ссылках в Python.

Переменные - это записи в системной таблице, где предусмотрено место для хранения ссылок на объекты.

Объекты - это область памяти с объемом, достаточным для представления значений этих объектов.

Ссылки - это автоматически разыменовываемые указатели на объекты.

При присваивании некой переменной значения, создается сама переменная, объект с соответствующим типом(Python хранит тип объекта в нем самом) и ссылка связывающая переменную с объектом.
Например: >>> a = 20

При присваивании переменной другого значения, объект удаляется сборщиком мусора в том случае если его счетчик ссылок равен нулю. Внутренняя реализация интерпритатора Python с целью оптимизации, кеширует и повторно использует некоторые типы неизменяемых объектов, такие как малые числа и строки.
Например: >>> a = 50


Переменные ссылающиеся на список ведут себя немного иначе.
  1. a = [23, 10, 5]
  2. b = a # значение a ссылка на список
  3. b[0] = 88
  4. # поскольку обе переменные ссылаются на один и тот же список, значение переменной "a" также изменятся
  5. print a # [88, 10, 5]
  6. print b # [88, 10, 5]
  7. # чтобы избежать этого можно вместо создания ссылки на объект копировать список
  8. a = [23, 10, 5]
  9. b = a[:] # копируем список(если вместо списка вам попадется словарь используйте метод a.copy())
  10. b[0] = 88
  11. print a # [23, 10, 5]
  12. print b # [88, 10, 5]

Модуль copy
  1. import copy
  2. b = copy.copy(a) # создание поверхностной копии объекта
  3. b = copy.deepcopy(a) # создание полной копии, копируются все вложенные части

Равенство или идентичность переменных?
  1. a = [23, 10, 5]
  2. b = a
  3. print a == b # проверка на равенство, результат True
  4. a = [23, 10, 5]
  5. b = a
  6. print a is b # проверка на идентичность, результат True
  7. a = [23, 10, 5]
  8. b = [23, 10, 5]
  9. print a == b # проверка на равенство, результат True
  10. a = [23, 10, 5]
  11. b = [23, 10, 5]
  12. print a is b # проверка на идентичность, результат False
  13. a = 20
  14. b = 20
  15. print a is b # проверка на идентичность, результат True(Python кеширует малые числа и строки)

Запросить количество ссылок на объект
  1. import sys
  2. t = 5
  3. print sys.getrefcount(t) # узнать количество ссылок на объект

+ Ссылки на изменяемые объекты долго живут Python
+ Задача от Яндекса на Python
* Python примеры
  Всего: 1

Зарегистрируйтесь и сможете комментировать все темы. Кнопочка вверху
Фильтр по автору
Скачать тему

В Форум

Новые вверху
waplog Рейтинг@Mail.ru
Statok.nettop-sid.ru
Яндекс.Метрика