【问题标题】:Efficient way to create copy of custom class创建自定义类副本的有效方法
【发布时间】:2021-01-12 16:51:44
【问题描述】:

我有一个自定义类,其属性是不同自定义类的实例列表。我希望能够有效地生成它的完整(即深层)副本。我尝试使用 deepcopy 方法,但速度很慢。最有效的方法是什么?最pythonic的方法是使用deepcopy吗? 如果有人能建议一种让类提供复制自身实例并返回它的方法的好方法,那将是完美的。下面的简单示例是我目前的做法,do_baz 函数在类之外。

import copy

class foo:
    def __init__(self, bar):
        self.bar = bar
        
    def baz(self):
        self.bar = self.bar[::-1]
        
def do_baz(foo_instance):
    new_foo = copy.deepcopy(foo_instance)
    new_foo.baz()
    return new_foo

bar = [1,2,3]
foo_1 = foo(bar)
foo_2 = do_baz(foo_1)
foo_1.bar, foo_2.bar

输出:

([1, 2, 3], [3, 2, 1])

我能找到的最接近的问题是Most efficient and most Pythonic way to deep copy class instance and perform additional manipulation,但我没有看到如何在这里应用它。

【问题讨论】:

    标签: python deep-copy


    【解决方案1】:

    您可以简单地将copy() 方法添加到您的类并返回deepcopy(self)

    import copy
    
    class foo:
        def __init__(self, bar):
            self.bar = bar
    
        def baz(self):
            self.bar = self.bar[::-1]
    
        def copy(self):
            return copy.deepcopy(self)
    
    bar = [1, 2, 3]
    foo_1 = foo(bar)
    foo_2 = foo_1.copy()
    foo_2.baz()
    print(foo_1.bar)
    print(foo_2.bar)
    

    输出:

    [1, 2, 3]
    [3, 2, 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2015-02-09
      相关资源
      最近更新 更多