Vì vậy, chỉ để thiết lập, tôi cảm thấy như tôi hiểu sự khác biệt giữa copy
vs deepcopy
trong module sao chép và tôi đã sử dụng copy.copy
và copy.deepcopy
trước khi thành công, nhưng đây là lần đầu tiên tôi thực sự đi về quá tải __copy__
và __deepcopy__
phương pháp. Tôi đã google và xem qua các mô-đun Python tích hợp để tìm các phiên bản của các hàm __copy__
và __deepcopy__
(ví dụ: sets.py
, decimal.py
và fractions.py
), nhưng tôi vẫn không chắc chắn 100%. .Cách đúng để ghi đè lên các hoạt động sao chép/in sâu trên một đối tượng bằng Python là gì?
Dưới đây là kịch bản của tôi:
Tôi có một đối tượng cấu hình mà chủ yếu chỉ bao gồm các thuộc tính đơn giản (mặc dù nó có khả năng sẽ có danh sách các đối tượng phi nguyên thủy khác trong nó). Ban đầu tôi sẽ khởi tạo một đối tượng cấu hình với một bộ giá trị mặc định. Cấu hình này sẽ được chuyển giao cho nhiều đối tượng khác (để đảm bảo tất cả các đối tượng bắt đầu với cùng một cấu hình). Tuy nhiên, khi sự tương tác của người dùng bắt đầu, mỗi đối tượng sẽ cần phải có khả năng tinh chỉnh các cấu hình một cách độc lập mà không ảnh hưởng đến cấu hình của nhau (mà nói với tôi rằng tôi sẽ cần phải thực hiện bản vẽ sâu của cấu hình ban đầu của mình).
Dưới đây là một đối tượng mẫu:
class ChartConfig(object):
def __init__(self):
#Drawing properties (Booleans/strings)
self.antialiased = None
self.plot_style = None
self.plot_title = None
self.autoscale = None
#X axis properties (strings/ints)
self.xaxis_title = None
self.xaxis_tick_rotation = None
self.xaxis_tick_align = None
#Y axis properties (strings/ints)
self.yaxis_title = None
self.yaxis_tick_rotation = None
self.yaxis_tick_align = None
#A list of non-primitive objects
self.trace_configs = []
def __copy__(self):
pass
def __deepcopy__(self, memo):
pass
đúng cách để thực hiện copy
và deepcopy
phương pháp trên đối tượng này để đảm bảo copy.copy
và copy.deepcopy
cho tôi các hành vi thích hợp là gì? Tôi hiện đang sử dụng Python 2.6.2.
Cảm ơn trước!
Tính năng này có hoạt động không? Có vấn đề gì không? –
Tôi nghĩ rằng tôi vẫn gặp sự cố với các tham chiếu được chia sẻ, nhưng hoàn toàn có thể là tôi đã làm rối tung lên ở nơi khác. Tôi sẽ kiểm tra lại dựa trên bài đăng của @ MortenSiebuhr khi tôi có cơ hội và cập nhật kết quả. –
Từ hiểu biết hạn chế hiện tại của tôi, tôi mong đợi copy.deepcopy (ChartConfigInstance) trả về một cá thể mới không có bất kỳ tham chiếu được chia sẻ nào với bản gốc (mà không tự mình thực hiện bản thân sâu). Điều này có đúng không? – emschorsch