Виписки про призначення в Python не копіюють об'єкти, вони створюють прив'язку між ціллю та об'єктом.
Таким чином, dict2 = dict1
це призводить до чергової прив'язки між dict2
об'єктом і dict1
посиланням на нього.
якщо ви хочете скопіювати дікт, ви можете скористатися copy module
. Модуль копіювання має два інтерфейси:
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
Різниця між дрібним і глибоким копіюванням стосується лише складних об'єктів (об'єктів, що містять інші об'єкти, наприклад, списки або екземпляри класу):
неповна копія створює новий об'єкт з'єднання , а потім (у міру можливості) вставляє посилання в нього на об'єкти знайдені в оригіналі.
Глибока копія створює новий об'єкт з'єднання , а потім, рекурсивно, вставляє копії в нього предметів , знайдених в оригіналі.
Наприклад, у python 2.7.9:
>>> import copy
>>> a = [1,2,3,4,['a', 'b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> a.append(5)
>>> a[4].append('c')
і результат:
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> d
[1, 2, 3, 4, ['a', 'b']]
dict1
іdict2
вказувати на той самий дікт.