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

问题描述

我正在编写一个程序,需要将数据属性从类的一个实例复制到另一个实例。起初,这是使用 deepcopy() 实现的,在函数的本地范围内创建一个重复的实例,然后在函数终止时将其丢弃。问题是,这用于程序的一个重要方面,该方面将重复多次。恐怕 deepcopy() 会严重拖慢程序。

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

instance2.dataattribute = instance1.dataattribute

我相信这会产生别名问题,其中对 instance1 的更改也会对 instance2 进行更改。

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

解决方法

您有三种选择:赋值、浅拷贝和深拷贝。当属性不可变时,赋值很好。浅拷贝 (copy.copy) 仅适用于具有不可变字段的可变属性(例如,整数列表)。深拷贝 (copy.deepcopy) 适用于包含可变字段的可变属性(例如,列表列表)。这是有关该主题的 very helpful article

,

我相信这会产生一个别名问题,其中对 instance1 的更改 也被制作成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]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...