Генераторы словарей и модули Рython
Функции в языке Python Функции в языке PythonВсе функции в языке Python возвращают какое-либо значение, хотя вполне возможно (и часто так и делается) просто игнорировать это значение. Возвращаемое значение может быть единственным значением или кортежем значений,...
Реализация генераторов Реализация генераторовМы рассмотрели коллекции-последовательности, tuple, collections, na-medtuple и list, поддерживающие, как и строки, возможность извлечения срезов. Также было рассмотрено использование оператора распаковывания...
Парсинг документов XML Парсинг документов XMLXML: Для парсинга документов XML широко используются два основных подхода. Один из них основан на анализе DOM (Document Object Model -объектная модель документа), а другой - на использовании SAX (Simple API for XML - упрощенный...
Копирование коллекций Копирование коллекцийКопирование коллекций: Поскольку в языке Python повсюду используются ссылки на объекты, когда выполняется оператор присваивания (=), никакого копирования данных на самом деле не происходит. Если справа от оператора находится литерал,...
Копирование коллекций
Копирование коллекций: Поскольку в языке Python повсюду используются ссылки на объекты, когда выполняется оператор присваивания (=), никакого копирования данных на самом деле не происходит. Если справа от оператора находится литерал, например, строка или число, в операнд слева записывается ссылка, которая указывает на объект в памяти, хранящий значение литерала.

Если справа находится ссылка на объект, в левый операнд записывается ссылка, указывающая на тот же самый объект, на который ссылается правый операнд. Вследствие этого операция присваивания обладает чрезвычайно высокой скоростью выполнения. Здесь была создана новая ссылка на объект (beatles), и обе ссылки указывают на один и тот же список - никакого копирования данных не производилось. Изменения были внесены с использованием переменной beatles, но это всего лишь ссылка, указывающая на тот же самый объект, что и ссылка songs.

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

Однако в некоторых ситуациях действительно бывает необходимо создать отдельную копию коллекции (то есть создать другой изменяемый объект). В случае последовательностей, когда выполняется оператор извлечения среза, например, songs[:2], полученный срез - это всегда независимая копия элементов. В случае словарей и множеств копирование можно выполнить с помощью методов diet. сору и set. сору . Кроме того, в модуле сору имеется функция сору.соруО, которая возвращает копию заданного объекта.

Обратите внимание, что все эти приемы копирования создают поверхностные копии, то есть копируются только ссылки на объекты, но не сами объекты. Для неизменяемых типов данных, таких как числа и строки, это равносильно копированию (за исключением более высокой эффективности), но для изменяемых типов данных, таких как вложенные коллекции, это означает, что ссылки в оригинальной коллекции и в копии будут указывать на одни и те же объекты. Когда выполняется поверхностное копирование списка х, копируется ссылка на вложенный список ["А", "В", "С"].

Это означает, что третий элемент в обоих списках, х и у, ссылается на один и тот же список, поэтому любые изменения, произведенные во вложенном списке, можно наблюдать с помощью любой из ссылок, х или у. Здесь списки х и у, а также элементы, которые они содержат, полностью независимы. Обратите внимание: с этого момента мы будем использовать термины копия и поверхностная копия как взаимозаменяемые, а когда будет подразумеваться глубокое копирование, об этом будет упоминаться явно.
Навигация: 1 2 3 4
 
 
© Copyright