cuốn sách gpt4 ai đã làm

python - 使用 deepcopy 创建一个新的 obj,但新的 obj 与旧的 obj 共享变量

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 10:40:05 27 4
mua khóa gpt4 Nike

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ũ? ?

câu trả lời hay nhất

_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 = []

Về python - sử dụng deepcopy để tạo obj mới, nhưng obj mới chia sẻ các biến với obj cũ, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/21177109/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress