copy() создает поверхностную копию словаря

a = {1: 10, 2: 20}
# Скопировать словарь присваиванием нельзя.
# Обе переменные связаны
# с одним и тем же объектом.
b = a
b[2] = 40
# Поэтому изменение словаря через
# одну переменную
# видны через другую.
print(a)
print(b)

print('----------')

a = {1: 10, 2: 20}
# Чтобы скопировать словарь
# используется метод copy()
b = a.copy()
b[2] = 40
# Теперь a и b указывают
# на разные словари.
print(a)
print(b)

print('----------')

a = {1: 'hello', 2: ['a']}
# Однако метод copy() создает только
# поверхностную копию объекта.
# Это значит, что если элемент объекта
# является составным, то копируется
# не сам элемент, а ссылка на него.
b = a.copy()
b[1] = 'hi'
# Поэтому изменения такого элемента
# изменяет оба словаря,
# в которых есть ссылка на него.
b[2].append('b')
print(a)
print(b)
{1: 10, 2: 40}
{1: 10, 2: 40}
----------
{1: 10, 2: 20}
{1: 10, 2: 40}
----------
{1: 'hello', 2: ['a', 'b']}
{1: 'hi', 2: ['a', 'b']}


Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий