在 class 的不同实例之间复制数据属性的最佳方法
Best way to copy data attributes between different instances of a class
我正在编写一个程序,需要将数据属性从 class 的一个实例复制到另一个实例。起初,这是使用 deepcopy() 实现的,在函数的本地范围内创建一个重复的实例,然后在函数终止时将其丢弃。问题是,这用于将重复多次的程序的一个重要方面。恐怕 deepcopy() 会严重降低程序速度。
我的替代解决方案是通过以下方式设置第二个实例的数据属性:
instance2.dataattribute = instance1.dataattribute
我认为这会产生别名问题,其中对 instance1 的更改也会对 instance2 进行更改。
将数据属性复制到同一属性的另一个实例的最有效方法是什么class?
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
) 适用于包含可变字段的可变属性(例如,列表的列表)。这是关于该主题的very helpful article。
我正在编写一个程序,需要将数据属性从 class 的一个实例复制到另一个实例。起初,这是使用 deepcopy() 实现的,在函数的本地范围内创建一个重复的实例,然后在函数终止时将其丢弃。问题是,这用于将重复多次的程序的一个重要方面。恐怕 deepcopy() 会严重降低程序速度。
我的替代解决方案是通过以下方式设置第二个实例的数据属性:
instance2.dataattribute = instance1.dataattribute
我认为这会产生别名问题,其中对 instance1 的更改也会对 instance2 进行更改。
将数据属性复制到同一属性的另一个实例的最有效方法是什么class?
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
) 适用于包含可变字段的可变属性(例如,列表的列表)。这是关于该主题的very helpful article。