2013-12-20 4 views
0

В чем разница между мелким и глубоким копированием? Я читал на документах python (http://docs.python.org/2/library/copy.html). он в основном сказал, что мелкое копирование делает ссылки, в то время как глубокое копирование фактически копирует. поэтому я создал список через мелкое копирование и изменил его значения. Но изменения не были отражены в исходном списке. Как это делается, если мелкое копирование работает над ссылками? (только для записи, я использую Python 2.7.5)мелкое и глубокое копирование

>>>li = [1,2,3,4] 
>>> x = copy(li) 
>>> x 
[1, 2, 3, 4] 
>>> x[0]=9 
>>> x 
[9, 2, 3, 4] 
>>> li 
[1, 2, 3, 4] 
+0

Вы можете найти подробное объяснение здесь http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy – Vb407

ответ

0

copyсоздает копию списка, но не копирует его элементы. Новый список содержит ссылки на элементы исходного списка.

deepcopy создает отдельную копию всего.

См:

import copy 

li = [[1], 2] 
x = copy.copy(li) 
x[0][0] = 2 
x[1] = 3 
print li 
print x 
0

Конструктор копирования используется для инициализации нового объекта с ранее созданного объекта одного и того же класса. По умолчанию компилятор написал мелкую копию. Мелкая копия отлично работает, когда динамическое распределение памяти не задействовано, поскольку при распределении динамической памяти оба объекта указывают на одну и ту же ячейку памяти в куче, поэтому для удаления этой проблемы мы написали глубокую копию, чтобы оба объекта имели свою собственную копию атрибутов в памяти. Чтобы прочитать подробности с полными примерами и пояснениями, вы можете увидеть часть этой статьи о difference between Shallow and Deep copy constructors.

Смежные вопросы