Ближе к концу раздела списков документации «Неофициальное введение в Python», можно найти следующее описание копирования списков:
Простое присваивание в Python никогда не копирует данные. Когда вы присваиваете список переменной, переменная ссылается на существующий список. Любые изменения, которые вы вносите в список через одну переменную, будут видны через все остальные переменные, которые ссылаются на нее.:
Код: Выделить всё
>>> rgb = ["Red", "Green", "Blue"]
>>> rgba = rgb
>>> id(rgb) == id(rgba) # they reference the same object True
>>> rgba.append("Alph")
>>> rgb ["Red", "Green", "Blue", "Alph"]
Все операции среза возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий фрагмент возвращает неполную копию списка:
Код: Выделить всё
>>> correct_rgba = rgba[:]
>>> correct_rgba[-1] = "Alpha"
>>> correct_rgba ["Red", "Green", "Blue", "Alpha"]
>>> rgba ["Red", "Green", "Blue", "Alph"]
< /code>
< /blockquote>
Итак, если я правильно понимаю: < /p>
[list]
[*]rgba[:]
[*]при этом создается неполная копия исходного списка.
[*]он копирует данные из оригинал в новый список, который не является ссылкой на оригинал
[/list]
Но:
- прочитав о разнице между мелкими и глубокими копиями, я понял, что мелкие копии — это ссылки на оригинал, тогда как глубинные копии — независимые (не имеющие ссылок) копии
- в приведенном выше примере документация создает глубокая копия, но упоминается как мелкая копия?
Подробнее здесь: https://stackoverflow.com/questions/782 ... tion-wrong