Глубокое и поверхностное копирование

В Python присваивание объекта фактически является ссылкой на объект. Когда вы создаёте объект и присваиваете его другой переменной, Python не копирует объект, а только копирует ссылку на объект, что мы называем поверхностным копированием.

В Python, чтобы две переменные не влияли друг на друга при операциях присваивания, можно использовать метод deepcopy из модуля copy, который называется глубоким копированием.

Функция append()

Когда объект типа list выполняет операцию append, он фактически добавляет ссылку на объект.

id()Функция: возвращает уникальный идентификатор объекта, который можно сравнить с адресом объекта в памяти.

>>>alist = [] >>> num = [2] >>> alist.append( num ) >>> id( num ) == id( alist[0] ) True
Как показано в примере выше, когда num изменяется (при условии, что id(num) не изменяется), содержимое alist изменяется соответственно. Это часто приводит к неожиданным последствиям. Чтобы избежать этого, можно использовать глубокое копирование:
alist.append( copy.deepcopy( num ) )

Оригинальный адрес: https://blog.csdn.net/u010099495/article/details/50276833