Các câu lệnh gán trong Python không sao chép các đối tượng, chúng tạo ra các ràng buộc giữa một mục tiêu và một đối tượng.
vì vậy, dict2 = dict1
nó dẫn đến một ràng buộc khác giữa dict2
và đối tượngdict1
đề cập đến.
nếu bạn muốn sao chép một dict, bạn có thể sử dụng copy module
. Mô-đun sao chép có hai giao diện:
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
Sự khác biệt giữa sao chép nông và sâu chỉ có liên quan đến các đối tượng ghép (các đối tượng có chứa các đối tượng khác, như danh sách hoặc thể hiện lớp):
Một bản sao nông xây dựng một đối tượng ghép mới và sau đó (trong phạm vi có thể) chèn các tham chiếu vào nó cho các đối tượng được tìm thấy trong bản gốc.
Một bản sao sâu xây dựng một đối tượng ghép mới và sau đó, đệ quy, chèn các bản sao vào đối tượng được tìm thấy trong bản gốc.
Ví dụ: trong 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')
và kết quả là:
>>> 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
vàdict2
chỉ vào cùng một dict.