The Python Language Reference / Справочник по языку Python: 3. Модель данных
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
3. Модель данных RedFox 11.12.09 в 13:24 |
|
|
3.1. Объекты, значения и типы RedFox 11.12.09 в 13:24 |
||
|
Объекты в Python являются абстракцией для данных. Все данные в программе на Python представлены объектами или взаимоотношениями между объектами. (В определенном смысле, и в соответствии с моделью "сохраняемых компьютерных программ" Фон Неймана, код также представляется объектами.) RedFox 11.12.09 в 13:29 |
||
|
Каждый объект имеет идентификатор, тип и значение. Идентификатор объекта никогда не изменяется после создания объекта, его можно представить себе как адрес объекта в памяти. Оператор 'is' сравнивает идентификаторы двух объектов; функция id() возвращает целое число, представляющее идентификатор (на текущий момент реализованный как адрес объекта). Тип объекта так же неизменяем. [1] Тип объекта определяет операции, поддерживаемые объектом (например, имеет ли объект длину), а также возможные значения для объекта заданного типа. Функция type() возвращает тип объекта (который в свою очередь является объектом). Значение некоторых объектов может меняться. Объекты, значение которых может меняться называются изменяемыми; объекты, значение которых не может быть изменено после создания называются неизменяемыми. (Значение неизменяемого объекта - контейнера, который содержит ссылки на изменяемые объекты может меняться когда значение последних изменено, тем не менее контейнер рассматривается как неизменяемый, потому что набор содержащихся в нем объектов не может быть изменен. Т.о., неизменяемость это в точности то же самое, что и неизменное значение объекта, это более точный термин.). Изменяемость объекта определяется его типом; например, числа, строки и записи неизменяемы, тогда как словари и списки изменяемы. Viktorianka 24.12.09 в 10:37 |
||
|
Объекты никогда явно не уничтожаются, тем не менее, когда они становятся недоступны они могут быть обработаны Сборщиком мусора. В реализации возможны поздняя сборка мусора или полное ее отсутствие. Каким образом реализована сборка мусора - это вопрос качества реализации. До тех пор пока объекты не собраны сборщиком мусора, они все еще доступны. Viktorianka 24.12.09 в 10:42 |
||
|
Нюанс реализации CPython: в настоящее время CPython использует схему подсчёта ссылок с (опционально) отсрочкой определения циклически связанного мусора, которая собирает большинство объектов, как только они становятся недоступными, но не гарантируется сборка мусора, содержащего циклические ссылки. Смотрите документацию модуля gc, чтобы узнать о контроле сбора циклического мусора. galayko 18.06.10 в 10:48 |
||
|
Обратите внимание, что использование данной реализации трассировки или отладки может сохранить объекты, которые, обычно собрались бы. Отметим также, что обработка исключения ‘try...except‘ выражением, может сохранить объекты. galayko 18.06.10 в 11:06 |
||
|
Некоторые объекты содержат ссылки на "внешние" ресурсы, такие как открытые файлы или окна. Понятно что эти ресурсы освобождаются при сборке мусора, однако поскольку не гарантировано что сбор мусора произойдет, то такие объекты также имеют способ освобождения внешних ресурсов как правило, Close() методом. В программах настоятельно рекомендуется закрывать такие объекты. Для этого удобно использовать блоки ‘try...finally‘ и ‘with‘. pu 13.03.10 в 13:22 |
||
|
Некоторые объекты содержат ссылки на другие объекты; они называются контейнерами. Примеры контейнеров, это кортежи, списки и словари. Ссылки являются частью значений контейнера. В большинстве случаев, когда мы говорим о значении контейнера, мы подразумеваем значения, а не тождества хранимых объектов; однако, когда мы говорим о изменчивости контейнера, подразумеваются только тождества хранимых в данный момент объектов. Поэтому, если неизменный контейнер (как, например, кортеж) содержит ссылку на изменяемый объект, его значение меняется, если меняется этот изменяемый объект. RedFox 09.08.10 в 17:27 |
||
|
Типы влияют почти на все аспекты поведения объекта. Даже важность тождественности объекта в какой-то степени подвержена этому влиянию: для неизменяемых типов, операции, которые вычисляют новые значения могут в действительности возвращать ссылку на какой-либо существующий объект такого-же типа и с таким-же значением, тогда как для изменяемых объектов это не допустимо. Например, после a = 1; b = 1, a и b могут ссылаться на один и тот же объект (а могут и на разные), имеющий значение "единица", что зависит от конкретной реализации, но после c = []; d = [], c и d обязательно ссылаются на два различных, уникальных, заново созданных пустых списка. (Заметьте, что c = d = [] присваивает один и тот же объект и c и d.) RedFox 10.08.10 в 19:15 |
||
|
3.2. Иерархия стандартных типов Hittih 13.02.10 в 04:55 3.2 Иерархия стандартных типов RedFox 10.08.10 в 19:16 |
||
|
Некоторые из описаний типов, данные ниже, содержат абзац, перечисляющий "специальные атрибуты". Это атрибуты, которые предоставляют доступ к внутреннему механизму реализации, и они не предназначены для использования в норме. Их определение может измениться в будущем. Hittih 13.02.10 в 05:06 Ниже в некоторых описаниях типов содержится абзац, перечисляющий "специальные атрибуты". Это атрибуты, которые предоставляют доступ к внутреннему устройству интерпретатора. В норме (кроме экспериментов над функциональностью интерпретатора, наладки и прочих исключительных случаев) их употреблять не следует - поскольку их определение может измениться в будущем. Hittih 14.08.13 в 14:35 |
||
|
None RedFox 11.12.09 в 13:30 |
||
|
Этот тип может иметь только единственное значение. И имеется только единственый объект с этим значением. Доступ к этому объекту происходит через встроенное имя "None". Во многих ситуациях он используется, чтобы обозначить отсутствие значения, например он возвращается из функций, которые не возвращают ничего явным образом. "None" имеет значение истинности: "false"("ложь"). Hittih 13.02.10 в 05:24 |
||
|
NotImplemented Hittih 14.02.10 в 12:05 |
||
|
Этот тип может иметь только единственное значение. И имеется только единственый объект с этим значением. Доступ к этому объекту происходит через встроенное имя "NotImplemented". Числовые методы и методы сравнения могут вернуть это значение, если они не имеют реализации данной операции для данных операндов. (...) "NotImplemented" имеет значение истинности: "true"("истина"). Hittih 13.02.10 в 05:48 |
||
|
Многоточие («ellipsis») Hittih 10.08.10 в 20:50 |
||
|
Этот тип может иметь только единственное значение. И имеется только единственый объект с этим значением. Доступ к этому объекту происходит через запись "..." (троеточие), или встроенное имя "Ellipsis". "Ellipsis" имеет значение истинности: "true"("истина"). Hittih 13.02.10 в 05:52 |
||
|
numbers.Number RedFox 10.08.10 в 19:02 |
||
|
Объекты этого типа создаются непосредственной записью числа, а также возвращаются как результат арифметическими операторами и арифметическими встроенными функциями. Числовые объекты являются неизменяемыми ("immutable") - будучи однажды созданным, их значение никогда не меняется. Питоновские числа, конечно, ассоциируются с числами, как они понимаются в математике, только они имеют ограничения компьютерного числового представления. Hittih 13.02.10 в 06:20 |
||
|
Питон различает целые, комплексные и числа с плавающей запятой : Hittih 13.02.10 в 06:26 |
||
|
numbers.Integral RedFox 10.08.10 в 19:02 |
||
|
Представляют собой элементы математического множества целых (положительных и отрицательных) . Hittih 10.08.10 в 20:34 |
||
|
Есть два типа целых : Hittih 13.02.10 в 07:21 |
||
|
Integers (int) RedFox 10.08.10 в 19:03 |
||
|
Этот тип представляет целые числа в теоретически неограниченном диапазоне, ограничиваясь только доступной памятью (виртуальной). При выполнении операций сдвига и маскирования подразумевается двоичная запись числа, и отрицательные числа представлены в варианте двоичного дополнительного кода, который даёт впечатление бесконечного ряда знаковых битов, распространяющихся влево. Hittih 13.02.10 в 07:47 |
||
|
Booleans («bool», «логические», «булевы») Hittih 10.08.10 в 20:37 |
||
|
Этот тип представляет значения истинности - "False" и "True". Только два объекта, представляющие "False" и "True", являются булевыми(логическими). Булевый - является подтипом целых, и булевые значения ведут себя как значения "0" и "1" (для "false" и "true" соответственно) - почти во всех контекстах - с тем исключением, что при конвертации в строку возвращаются строки "False" или "True". Hittih 13.02.10 в 08:04 |
||
|
Правила представления целых нацелены на наиболее функциональную интерпретацию операций сдвига и маскирования для целых чисел, включая отрицательные. Hittih 10.08.10 в 21:12 |
||
|
numbers.Real (float) RedFox 10.08.10 в 19:03 |
||
|
Представляют собой машинную реализацию чисел с плавающей запятой двойной точности. Приходится полностью полагаться на архитектуру машины, на которой происходит исполнение (и на реализацию «C» или «Java») , в отношении диапазона и обработки переполнения. Питон не поддерживает числа с плавающей запятой одинарной точности – экономия ресурсов процессора и памяти, которая обычно является причиной их использования, перечёркивается дополнительными затратами при использовании объектов Питона, так что нет причин усложнять язык двумя видами чисел с плавающей запятой. Hittih 10.08.10 в 22:13 |
||
|
numbers.Complex (complex) RedFox 10.08.10 в 19:03 |
||
|
Этот тип определяет комплексные числа, как пары зависящих от машинной реализации чисел двойной длины с плавающей точкой. Для них действительны те же ограничения, что и для чисел с плавающей точкой. Значения вещественной и мнимой частей комплексного числа z могут быть получены с помощью атрибутов (только для чтения) z.real и z.imag. RedFox 10.08.10 в 19:22 |
||
|
Последовательности Hittih 13.02.10 в 10:35 |
||
|
Этот тип представляет ограниченое (не бесконечное) упорядоченое множество, индексированное неотрицательными целыми числами. При длинне последовательности n множество индексов содержит числа 0, 1, ..., n-1. Элемент i последовательности a адресуется записью "a[i]". Hittih 13.02.10 в 08:24 |
||
|
Для последовательностей также доступно вырезание ("срезы", "slices"). Так "a[i:j]" выбирает все элементы с индексом k, таким, что i <= k < j. При использовании в качестве выражения, срез является последовательностью того же типа, что и исходная последовательность. При этом множество индексов заново перечисляется, начиная с 0. Hittih 13.02.10 в 08:49 |
||
|
Некоторые последовательности также поддерживают "расширенные срезы" с третьим параметром "шаг". Так "a[i:j:k]" выбирает все элементы из a с индексом x , где x = i + n*k, n >= 0 , i <= x < j. Hittih 13.02.10 в 08:59 |
||
|
Последовательности различаются с точки зрения их изменяемости : Hittih 13.02.10 в 09:02 |
||
|
Неизменяемые последовательности Hittih 13.02.10 в 09:03 |
||
|
Объект принадлежащий к типу неизменяемой последовательности не может изменяться с момента создания. (Если же этот объект содержит ссылки на другие объекты, то уже́́́ эти другие объекты могут оказаться изменяемыми - и могут меняться; однако тот набор объектов, на которые непосредственно ссылается неизменяемый объект, меняться не может. Hittih 13.02.10 в 09:19 |
||
|
Следующие типы являются неизменяемыми последовательностями : Hittih 13.02.10 в 09:21 |
||
|
Строки Hittih 13.02.10 в 10:27 Текстовые объекты ("strings") Hittih 10.07.10 в 20:04 |
||
|
Элементами текстового ("строкового") объекта являются элементарные(минимальные) единицы(порции) кода Юникод. Код символа Юникод реализуется текстовым объектом из одного символа и может использовать 16- или 32-битное значение, означающее номер символа Юникод (максимальное значение для этого номера задано в "sys.maxunicode" , и зависит от того, как Питон сконфигурирован при компиляции). Могущие присутствовать В Юникодном объекте "суррогатные" пары будут восприниматься как два отдельных объекта. Встроенные функции "chr()" и "ord()" выполняют преобразование между односимвольным текстовым объектом и неотрицательным целым числовым объектом с соответствующим значением номера символа Юникода, как определено в "Unicode Standard 3.0" . Преобазования из и в другие кодировки возможны с помощью метода "encode()" . Hittih 10.07.10 в 20:01 |
||
|
Кортежи ("tuples") Hittih 13.02.10 в 10:22 |
||
|
Элементами "кортежа" могут быть любые объекты Питона. Кортежи из двух и более элементов образуются перечнем выражений, разделённых запятыми. Кортеж из одного элемента ("singleton") может быть образован добавлением запятой после выражения (само выражение без запятой - не создаёт кортеж, поскольку в таком случае скобки обозначают группирование в выражении). Пустой кортеж может быть образован пустой парой скобок. Hittih 13.02.10 в 09:59 |
||
|
Байты Hittih 13.02.10 в 10:20 |
||
|
Байтовый объект является неизменяемым массивом. Его элементами являются 8-битовые байты, которые могут быть представлены целыми числами в диапазоне 0 <= x < 256. Для создания байтовых объектов можно использовать непосредственную запись байтов (как например " b'abc' "), или встроенную функцию "bytes()". Кроме того, байтовые объекты могут быть перекодированы в строковые с помощью метода "decode()". Hittih 13.02.10 в 10:16 |
||
|
Изменяемые последовательности galayko 18.06.10 в 09:14 |
||
|
Изменяемые последовательности могут быть изменены после их создания. Нотация подписки и нарезки может быть использована в качестве цели присваивания и del (delete) выражения. galayko 18.06.10 в 09:14 |
||
|
В данной версии есть два типа изменяемых последовательностей: Hittih 11.07.10 в 10:10 |
