Простая задача в 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"]
< /code>
< /blockquote>
Поэтому я понимаю, что новый список - это ссылка на исходный список. Но сразу же, документация гласит: < /p>
Все операции среза возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий срез возвращает мелкую копию списка: < /p>
>>> correct_rgba = rgba[:]
>>> correct_rgba[-1] = "Alpha"
>>> correct_rgba ["Red", "Green", "Blue", "Alpha"]
>>> rgba ["Red", "Green", "Blue", "Alph"]
< /code>
< /blockquote>
Итак, если я правильно понимаю: < /p>
[list]
[*]rgba[:]
[*] Это делает мелкую копию исходного списка
[*] Считывает данные из Оригинал, в новый список, который не является ссылкой на оригинал < /li>
< /ul>
Но: < /p>
После прочтения о разнице между мелководьями и deep , я понимаю, что мелкие копии являются ссылками на их оригинал, в то время как < EM> Глубокие копии являются независимыми (незащитными) копиями
[*] В примере выше, документация создает Deep Copy , но упоминает его как мелкая копия ?
[/list]
Подробнее здесь: https://stackoverflow.com/questions/782 ... tion-wrong