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

Python - Các phần tử của copy.copy() vẫn chia sẻ bộ nhớ với các phần tử gốc phải không?

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

Tôi muốn tạo một bản sao của danh sách (nghĩa đen là một bản sao riêng biệt, không có gì được chia sẻ với danh sách gốc). Tôi đã sử dụng copy.copy() và tạo 2 danh sách riêng biệt nhưng tại sao các thành phần của mỗi bản sao dường như vẫn được chia sẻ?

Điều này thật khó giải thích, hãy xem kết quả bên dưới.

>>> a = [[0,1], [2,3]]
>>> nhập bản sao
>>> b = copy.copy(a)
>>> temp = b.pop()
>>> tạm thời
[hai mươi ba]
>>> một
[[0, 1], [2, 3]]
>>>b
[[0, 1]]
>>>temp.append(4)
>>> tạm thời
[2, 3, 4]
>>> một
[[0, 1], [2, 3, 4]]
>>>b
[[0, 1]]

如您所见,nhiệt độ 是从 b bật lên, nhưng khi tôi thay đổi nhiệt độ(nghĩa là thêm nội dung mới),nhiệt độ Dữ liệu trong a cũng đã thay đổi.

Câu hỏi của tôi là: đây có phải là hành vi được mong đợi của deepcopy không? Vậy làm cách nào tôi có thể tạo một bản sao hoàn toàn riêng biệt của danh sách?

P/S: Như ví dụ trên mình nghĩ mình làm được
temp = copy.copy(b.pop())
Nhưng đây có phải là cách tiếp cận đúng đắn? Có cách nào khác để làm những gì tôi muốn?

P/S 2: Điều này cũng xảy ra khi tôi sử dụng b = a[:]

Cảm ơn!

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

Bạn nên sử dụng deepcopy() ở đó, vì copy() tạo một bản sao nông của đối tượng bạn đang tham chiếu chứ không phải các đối tượng bên trong nó. Nếu bạn muốn toàn bộ đối tượng (và các đối tượng bên trong nó), thay vào đó hãy sử dụng deepcopy().

Vui lòng trích dẫn liên kết để hiểu rõ hơn

Sự khác biệt giữa bản sao sâu và bản sao nông là gì?

https://docs.python.org/2/library/copy.html

Về Python - Các phần tử của copy.copy() vẫn chia sẻ bộ nhớ với các phần tử gốc phải không? , 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/39262918/

29 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