ссылки на объекты Python и глубокая копия - PullRequest
0 голосов
/ 22 октября 2018

Внезапно я немного запутался, возможно, я устал, поэтому это может быть причиной.

В любом случае, с помощью интерпретатора рассмотрим следующее:

> x = {'hello':'world'}
> y=x

> x= None

>y
y={'hello':'world'}

Почему бы y = None не y теперь ссылаться на то же значение, что и x после изменения?

Второй вопрос:
В чем разница между:

x= {'test':1}
y = dict(x)
VS  
y = copy.deepcopy(x)

1 Ответ

0 голосов
/ 22 октября 2018

В этом случае объект словаря {'hello': 'world'} создается в памяти, а затем ему присваивается x.Назначение y=x назначает секунду ссылку на объект словаря, на этот раз y.

Однако y НЕ является указателем на указатель x.Переназначение x не меняет то, на что ссылается y.


Для вашего второго вопроса в данном конкретном случае разницы нет.

Использование:

x = {'test':1}
y = dict(x)

Создает новую копию словаря и присваиваетэто к y.

Использование:

y = copy.deepcopy(x)

Создание идентичной копии.Разница в том, что значение словаря было изменяемым объектом, например списком.

Здесь y - это мелкая копия x:

x = {'test': [1,2,3]}
y = dict(x)

Таким образом, изменение списка внутри объекта словаря, на который ссылается x, также будет отображаться и в y.

x['test'][1] = 0
y
# returns:
{'test': [1, 0, 2]}

Однако использование:

x = {'test': [1,2,3]}
y = copy.deepcopy(x)

создаст копиюосновного объекта, а также всех объектов, которые он содержит.Поэтому теперь изменение списка в x не изменит значения y.

x['test'][1] = 0
y
# returns
{'test': [1,2,3]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...