@HitGirl

Почему метод copy выполняет глубокое копирование?

Здравствуйте!
В первом примере происходит поверхностное копирование словаря:
s = {"str": "1", "list": [1, 2], "dict": {"first": "test1"}}
f = s.copy()
f['second'] = '3'
f['dict']['third'] = '3'
print(s)

Подскажите, пожалуйста, почему во втором примере происходит глубокое копирование?
users = {"+1111111": "Tom","+3333333": "Bob","+5555555": "Alice"}
 
users2 = {"+2222222": "Sam","+6666666": "Kate"}
users.update(users2)

print(users)    # {"+1111111": "Tom", "+3333333": "Bob", "+5555555": "Alice", "+2222222": "Sam", "+6666666": "Kate"}
print(users2)   # {"+2222222": "Sam", "+6666666": "Kate"}

users3 = users.copy()
print(users3)

users["+5555555"]=True
print(users)
print(users2)
print(users3)
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Zarom
@Zarom
Мастер на все руки из жопы
print(users3 is users) # False
copy создает новый словарь users3 и вставляет в него ссылки на значения из словаря users - поэтому это поверхностная копия.
users3 - другой словарь, поэтому изменения в нем не отражаются на оригинале. Меняется ссылка на объект в словаре users3, а не значение по этой ссылке
print(users["+5555555"] is users3["+5555555"])  # True
users["+5555555"]=True
print(users["+5555555"] is users3["+5555555"])  # False
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы