Tôi hiểu sự khác biệt giữa copyso với deepcopytrong mô-đun sao chép. Tôi đã sử dụng copy.copyvà copy.deepcopytrước đó thành công, nhưng đây là lần đầu tiên tôi thực sự đi về quá tải các phương thức __copy__và __deepcopy__. Tôi đã google xung quanh và nhìn qua được xây dựng trong module Python để tìm kiếm các trường hợp của __copy__và __deepcopy__chức năng (ví dụ sets.py, decimal.pyvà fractions.py), nhưng tôi vẫn không chắc chắn 100% tôi đã nhận nó đúng.
Đây là kịch bản của tôi:
Tôi có một đối tượng cấu hình. 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, một khi tương tác của người dùng bắt đầu, mỗi đối tượng cần phải điều chỉnh cấu hình của nó một cách độc lập mà không ảnh hưởng đến cấu hình của nhau (điều này nói với tôi rằng tôi sẽ cần tạo deepcopys của cấu hình ban đầu để xử lý).
Đâ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
Cách thực hiện đúng copyvà deepcopycác phương pháp trên đối tượng này là gì để đảm bảo copy.copyvà copy.deepcopycung cấp cho tôi các hành vi phù hợp?