Tôi đang làm việc trên một số lớp bằng mô-đun pygraph và khi tôi sử dụng phương thức add_node(), nó luôn xuất hiện "nút xxx đã có trong biểu đồ". Vì vậy, tôi đã thử sử dụng deepcopy() để tạo một phiên bản mới và gặp phải một số vấn đề:
kiểm tra lớp:
_lưu trữ = []
def add_item(self,item):
self._storage.append(item)
def pop_item(tự,mục):
trả về self._storage.pop()
chắc chắn __repr__(tự):
trả về '%s' %self._storage[:]
nếu __name__ == '__main__':
a1 = kiểm tra()
a1.add_item(3)
a1.add_item(4)
từ bản sao nhập bản sao, bản sao sâu
a2 = bản sao(a1)
a3 = bản sao sâu(a2)
Nó cho thấy:
Trong [28]: a1
Ra[28]: [3, 4]
Trong [29]: a2
Ra[29]: [3, 4]
Trong [30]: a3
Ra[30]: [3, 4]
Nhưng nếu tôi thêm một số mục mới vào danh sách a2 thì a3 cũng thay đổi
Trong[31]: a1.add_item(440)
Trong [32]: a2
Ra[32]: [3, 4, 440]
Trong [33]: a3
Ra[33]: [3, 4, 440]
Vậy làm cách nào tôi chỉ có thể sao chép một số phiên bản và có các biến của nó độc lập với các biến trong phiên bản cũ? ?
_kho
là một biến lớp. bản sao sâu
Một bản sao mới của toàn bộ lớp không được tạo nên các bản sao sẽ vẫn có chung các biến lớp. Những gì bạn muốn là một biến thể hiện:
def __init__(self):
self._storage = []
Tôi là một lập trình viên xuất sắc, rất giỏi!