在类的不同实例之间复制数据属性的最佳方法

2024-06-06 09:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,需要将数据属性从一个类的一个实例复制到另一个实例。首先,这是使用deepcopy()实现的,在函数的本地范围内创建一个重复实例,然后在函数终止时丢弃该实例。问题是,这用于程序的一个重要方面,该方面将重复多次。我担心deepcopy()会使程序速度大大降低

我的替代解决方案是通过以下方式设置第二个实例的数据属性:

instance2.dataattribute = instance1.dataattribute

我认为这会产生一个别名问题,对instance1的更改也会对instance2进行更改

将数据属性复制到同一类的另一个实例的最有效方法是什么


Tags: 数据实例方法函数程序属性方式解决方案
2条回答

I believe this creates an aliasing problem, where changes to instance1 are also made to instance2

你真的试过吗

>>> class Foo:
...    def __init__(self, a):
...        self.a = a
        
>>> foo = Foo(2)
>>> bar = Foo(3)

>>> bar.a = foo.a

>>> bar.a
2

>>> foo.a = 15
>>> bar.a
2

它只会在参数可变时创建问题:

>>> foo = Foo([1, 2])
>>> bar = Foo([2, 3])

>>> bar.a = foo.a
>>> foo.a.append(6)

>>> bar.a
[1, 2, 6]

您有三种选择:赋值、浅拷贝和深拷贝。当属性不可变时,赋值就可以了。浅拷贝(copy.copy)仅适用于具有不可变字段的可变属性(例如,整数列表)。深度复制(copy.deepcopy)适用于包含可变字段的可变属性(例如,列表列表)。下面是关于这个主题的一篇文章

相关问题 更多 >